Clan System

Categoria cu cereri de pluginuri si nu numai.

Moderators: Moderatori ajutatori, Moderatori, Echipa eXtreamCS.com

Forum rules
Accesează link-ul pentru a putea vedea regulile forumului

Daca doriti sa vi se modifice un plugin, va rugam postati aici .
Post Reply
User avatar
limbaa
Membru, skill 0
Membru, skill 0
Posts: 33
Joined: 26 Oct 2015, 11:25
Detinator Steam: Da
Detinator server CS: GOX.BLACKGAMES.RO
SteamID: tenlimba96
Fond eXtream: 0
Discord: GaBy#1976
Has thanked: 4 times
Contact:

16 Sep 2020, 19:27

Salut! Poate cineva sa imi scoata tag-ul din acest plugin?

Code: Select all

#include < amxmodx >
#include < amxmisc >
#include < hamsandwich >
#include < fakemeta >
#include < adv_vault >

/*	====== START EDIT SECTION ======	*/

// Aici setezi numarul maxim de jucatori care se pot conecta la serverul tau
#define MAXPLAYERS 32

#define CLANNAME_LENGHT 20
#define CLAN_MAXMEMBERS 5
#define CLAN_MINMEMBERS 2
#define MENU_TITTLE_LENGHT 128
#define PASSWORD_LENGHT 50

new const MENU_PREFIX[ ] = "\r[ \yAMXX \dCLAN \ySYSTEM \r]\w";
new const CHAT_PREFIX[ ] = "!g[ CLAN SYSTEM ]!n";

/*	==== END EDIT SECTION ====	*/

#define MP MAXPLAYERS+1

#define flag_get(%1,%2)		(%1 & (1 << (%2 & 31)))
#define flag_set(%1,%2)		(%1 |= (1 << (%2 & 31)))
#define flag_unset(%1,%2)		(%1 &= ~(1 << (%2 & 31)))

#define TASK_HUD 1000
#define ID_HUD ( taskid - TASK_HUD )

enum 
{ 
	C_MEMBERSHIP, C_CLANNAME, C_DATE, C_PASS, C_PNAME, C_KILLS, C_DEATHS, C_HS_KILLS, C_HS_DEATHS,
	C_KNIFE_KILLS, C_KNIFE_DEATHS, C_SUICIDES, C_SPAWNS, C_RANGE, C_CLAN_CHAT,
	
	C_MAX
}

enum { WITHOUT_CLAN = 0, CLAN_MEMBER, CLAN_BOSS, CLAN_OWNER, MAX_MEMBER_RANGES }
enum { LOAD= 0, SAVE }
enum _:RANGES { RANGO_NAME[ 50 ], RANGO_FRAGS }
enum { NOT_REGISTERED = 0, REGISTERED, LOGGUED, MAX_STATUS }
enum _:DATA_RANK { KILLS, DEATHS, HS_KILLS, HS_DEATHS, KNIFE_KILLS, KNIFE_DEATHS, SUICIDES, SPAWNS }
enum _:BITS { CONNECTED, ALIVE, CAN_CHANGE_PW }
enum _:MSGS { MSG_VGUI, MSG_SHOWMENU, MSG_SAYTEXT, MSG_TEAMINFO }
	
new const P_NAME[ ] = "CLAN SYSTEM";
new const P_VERSION[ ] = "1.1b";
new const P_AUTOR[ ] = "kikizon";

new kBits[BITS], kMsg[MSGS];

new kClanMembership[ MP ], kRange[ MP ], kActivatedClanChat[ MP ];

new kInvited[ MP ], kClanOwner[ MP ], kDataRank[ MP ][ DATA_RANK ];

new kClanName[ MP ][ CLANNAME_LENGHT ], kClanNameConfirmated[ MP ];

new kPlayerName[ MP ][ 32 ], kPname[ MP ][ 32 ];

new vault, kFields[ C_MAX ], kPassword[ MP ][ PASSWORD_LENGHT ], kPassword2[ MP ][ PASSWORD_LENGHT ], kDate[ MP ][ 32 ], kStatus[ MP ];

new  hudSync;

new const Status[ MAX_STATUS ][ ] = { "UNREGISTERED", "REGISTERED", "LOGGED" };
new const MemberRange[ MAX_MEMBER_RANGES ][ ] = { "NO CLAN", "MEMBER", "BOSS", "FOUNDER" };

new const Rangos[][RANGES] = 
{
	{ "", 0 },
	{ "Beginner", 100 },
	{ "Silver I", 200 },
	{ "Silver II", 300 },
	{ "Silver III", 500 },
	{ "Silver IV", 700 },
	{ "Silver Elite", 800 },
	{ "Silver Elite Master", 900 },
	{ "Gold Nova I", 1000 },
	{ "Gold Nova II", 1200 },
	{ "Gold Nova III", 1300 },
	{ "Gold Nova Master", 1400 },
	{ "Master Guardian I",1500 },
	{ "Master Guardian II", 1700 },
	{ "Master Guardian Elite", 1800 },
	{ "Distinguished Master Guardian", 1900 },
	{ "Legendary Eagle", 2000 },
	{ "Legendary Eagle Master", 2100 },
	{ "Supreme Master First Class", 2200 },
	{ "The Global Elite", 2500 }
};


/*	================	*/

public plugin_init() 
{
	register_plugin( P_NAME, P_VERSION, P_AUTOR );
	
	register_event("DeathMsg", "ev_DeathMsg", "a");
	
	RegisterHam(Ham_Killed, "player", "ham_PlayerKilledPost", true );
	RegisterHam(Ham_Spawn, "player", "ham_PlayerSpawnPost", true );
	
	register_forward( FM_ClientUserInfoChanged, "fm_ClientInfoChanged" );
	
	register_clcmd( "say", "Block_Say" );
	register_clcmd( "say_team", "Block_TeamSay" );
	register_clcmd( "say /clan", "cmd_CLAN" );
	register_clcmd("say /claninfo", "INFORMATII")
	register_clcmd("say","hook_say"); 
	register_clcmd( "JOIN_CLAN_NAME", "JoinClanName" );
	register_clcmd( "JOIN_PASSWORD", "JoinPassword" );
	
	
	kMsg[MSG_VGUI] = get_user_msgid("VGUIMenu");
	kMsg[MSG_SHOWMENU] = get_user_msgid("ShowMenu");
	kMsg[MSG_SAYTEXT] = get_user_msgid("SayText");
	kMsg[MSG_TEAMINFO] = get_user_msgid("TeamInfo");
	//register_message(kMsg[MSG_VGUI], "message_VGUImenu");
	//register_message(kMsg[MSG_SHOWMENU], "message_VGUImenu");
	
	
	hudSync = CreateHudSyncObj();
	
	
	vault = adv_vault_open( "CLAN_SYSTEM", true );
	 
	kFields[ C_MEMBERSHIP ] = adv_vault_register_field( vault, "AFFILIATION");
	kFields[ C_CLANNAME ] = adv_vault_register_field( vault, "CLAN NAME", DATATYPE_STRING, CLANNAME_LENGHT-1 );
	kFields[ C_DATE ] = adv_vault_register_field( vault, "DATE", DATATYPE_STRING, 32 );
	kFields[ C_PASS ] = adv_vault_register_field( vault, "PASSWORD", DATATYPE_STRING, PASSWORD_LENGHT-1 );
	kFields[ C_PNAME ] = adv_vault_register_field( vault, "NAME", DATATYPE_STRING, 31 );
	kFields[ C_KILLS ] = adv_vault_register_field( vault, "KILLS" );
	kFields[ C_DEATHS ] = adv_vault_register_field( vault, "DEATHS" );
	kFields[ C_HS_KILLS ] = adv_vault_register_field( vault, "HS KILLS" );
	kFields[ C_HS_DEATHS ] = adv_vault_register_field( vault, "HS DEATHS" );
	kFields[ C_KNIFE_KILLS ] = adv_vault_register_field( vault, "KNIFE KILLS" );
	kFields[ C_KNIFE_DEATHS ] = adv_vault_register_field( vault, "KNIFE DEATHS" );
	kFields[ C_SUICIDES ] = adv_vault_register_field( vault, "SUICIDES" );
	kFields[ C_SPAWNS ] = adv_vault_register_field( vault, "RESPAWNS" );
	kFields[ C_RANGE ] = adv_vault_register_field( vault, "RANG" );
	kFields[ C_CLAN_CHAT ] = adv_vault_register_field( vault, "CLANCHAT" );
	
	adv_vault_init( vault );
}

public hook_say(id) {
	static s_Args[192]; 
	
	read_argv(1, s_Args, sizeof(s_Args) - 1); 
	
	if(equal(s_Args, "/", 1)) {
		return PLUGIN_HANDLED;
	}
	return PLUGIN_CONTINUE;
}

public INFORMATII(id)
{
	show_motd(id, "cstrike/addons/amxmodx/configs/claninfo.txt")
}


public client_putinserver( index )
{
	flag_set(kBits[CONNECTED], index);
	get_user_name( index, kPlayerName[ index ], 31 );
	get_time( "%c", kDate[ index ], 31);
	
	kClanMembership[ index ] = WITHOUT_CLAN;
	kClanName[ index ] = "^0";
	kPassword[ index ] = "^0";
	kClanNameConfirmated[ index ] = false;
	kRange[ index  ] = 0;
	kActivatedClanChat[ index ] = false;
	
	DataManagement( index, LOAD );
}

public client_disconnect( index )
{
	remove_task( index+TASK_HUD );
	DataManagement( index, SAVE );
	
	flag_unset(kBits[CONNECTED], index);
}

public Block_Say(index)
{
	static said[191];
	read_args(said, charsmax(said)); 
	szRemove_Quotes(said, said);
	replace_all(said, charsmax(said), "%", ""); 
	replace_all(said, charsmax(said), "#", "");
    
	if (!ValidMessage(said, 1)) return PLUGIN_CONTINUE;
    
	static color[11], prefix[111], range[64];
	get_user_team(index, color, charsmax(color));
	
	formatex(range, charsmax(range), "^x03(^x04 %s^x04 %s^x03)", Rangos[kRange[index]][RANGO_NAME], kClanName[ index ][ 0 ] ? kClanName[ index ] : "NO CLAN" );
	formatex(prefix, charsmax(prefix), "%s%s^x03 %s", flag_get(kBits[ALIVE],index)?"^x01":"^x01*DEAD* ", range, kPlayerName[index]);
    
	if (is_user_admin(index)) format(said, charsmax(said), "^x04%s", said);
    
	format(said, charsmax(said), "%s^x01 : %s", prefix, said);
    
	static i, team[11];
	
	for (i = 1; i <= MAXPLAYERS; ++i)
	{
		if (!flag_get(kBits[CONNECTED],i)) continue;

		if (is_user_admin(i) || flag_get(kBits[ALIVE],index) && flag_get(kBits[ALIVE],i) || !flag_get(kBits[ALIVE],index) && !flag_get(kBits[ALIVE],i))
		{
			get_user_team(i, team, charsmax(team));
			changeTeamInfo(i, color);
			writeMessage(i, said);
			changeTeamInfo(i, team);
		}
	}
    
	return PLUGIN_HANDLED_MAIN;
}


public Block_TeamSay(index)
{
	static said[191];
	read_args(said, 190); 
	szRemove_Quotes( said, said );
	replace_all(said, 190, "%", ""); 
	replace_all(said, 190, "#", "");
	
	if(kActivatedClanChat[ index ] )
	{
		if(!ValidMessage(said, 1) || kClanMembership[ index ] == WITHOUT_CLAN)
		{
			Color_Print( index, "Your message is no valid or you are not in a clan yet.");
			return PLUGIN_HANDLED;
		}
	
		static i, team[11], color[11], range[128], prefix[111]; 
		get_user_team(index, color, charsmax(color));
		
		formatex(range, charsmax(range), "^x03(^x01 PRIVATE CHAT:^x04 %s ^x03)", kClanName[ index ]);
		formatex(prefix, charsmax(prefix), "%s%s^x03 %s", flag_get(kBits[ALIVE],index)?"^x01":"^x01*DEAD* ", range, kPlayerName[index]);
    
		if (kClanMembership[ index ] == CLAN_OWNER || kClanMembership[ index ] == CLAN_BOSS) format(said, charsmax(said), "^x04%s", said);
	
		format(said, charsmax(said), "%s^x01 : %s", prefix, said);
	
		for (i = 1; i <= MAXPLAYERS; ++i)
		{
			if (!flag_get(kBits[CONNECTED],i)) continue;

			if ( equal(kClanName[ index ], kClanName[ i ]) )
			{
				get_user_team(i, team, charsmax(team));
				changeTeamInfo(i, color);
				writeMessage(i, said);
				changeTeamInfo(i, team);
			}
		}
	}
	else
	{
		if (!ValidMessage(said, 1)) return PLUGIN_CONTINUE;

		static playerTeam, playerTeamName[19];
		playerTeam = get_user_team(index);
    
		switch (playerTeam)
		{
			case 1: copy (playerTeamName, 6, "^x03 * CT *");
			case 2: copy (playerTeamName, 8, "^x03 * TT *");
			default: copy (playerTeamName, 11, "* SPEC *");
		}
    
		static color[11], prefix[111], range[128];
		get_user_team(index, color, charsmax(color));
	
		formatex(range, charsmax(range), "^x03(^x04 %s^x04 %s^x03)", Rangos[kRange[index]][RANGO_NAME], kClanName[ index ][ 0 ] ? kClanName[ index ] : "NO CLAN" );
		formatex(prefix, charsmax(prefix), "%s%s %s^x03 %s", flag_get(kBits[ALIVE],index)?"^x01":"^x01*DEAD* ", playerTeamName, range, kPlayerName[index]);
    
		if (is_user_admin(index)) format(said, charsmax(said), "^x04%s", said);
    
		format(said, charsmax(said), "%s^x01 : %s", prefix, said);
    
		static i, team[11];
		for (i = 1; i <= MAXPLAYERS; ++i)
		{
			if (!flag_get(kBits[CONNECTED],i)) continue;

			if (get_user_team(i) == playerTeam)
			{
				if (flag_get(kBits[ALIVE],index) && flag_get(kBits[ALIVE],i) || !flag_get(kBits[ALIVE],index) && !flag_get(kBits[ALIVE],i))
				{
					get_user_team(i, team, charsmax(team));
					changeTeamInfo(i, color);
					writeMessage(i, said);
					changeTeamInfo(i, team);
				}
			}
		}	
	}
    
	return PLUGIN_HANDLED_MAIN;
}

public ham_PlayerKilledPost( victim, attacker, shouldgib )
{
	if( !is_user_connected( attacker ) || victim == attacker || !attacker )
		return;
		
	if(get_user_weapon( attacker ) == CSW_KNIFE)
	{
		++kDataRank[ attacker ][ KNIFE_KILLS ];
		++kDataRank[ victim ][ KNIFE_DEATHS ];
	}
	
	++kDataRank[ attacker ][ KILLS ];
	++kDataRank[ victim ][ DEATHS ];
	
	flag_unset(kBits[ALIVE],victim);
	
	UpdateRange( attacker );
}

public ham_PlayerSpawnPost( index )
{
	flag_set(kBits[ALIVE],index);
	
	if( !flag_get(kBits[ALIVE], index)) return;
	
	++kDataRank[ index ][ SPAWNS ];
}

public ev_DeathMsg()
{
	static victim, attacker, headshot;
	
	attacker = read_data(1);
	victim = read_data(2);
	headshot = read_data(3);
	
	if( !attacker || victim == attacker )
	{
		++kDataRank[ victim ][ SUICIDES ];
		return;
	}
		
	if( headshot )
	{
		++kDataRank[ attacker ][ HS_KILLS ];
		++kDataRank[ victim ][ HS_DEATHS ];
	}
}

/*	================	*/

public cmd_CLAN( index )
{
	if( kClanMembership[ index ] == WITHOUT_CLAN )
	{
		ShowMenuCreateClan( index );
		return PLUGIN_HANDLED;
	}
	
	ShowMenuClan( index );
	return PLUGIN_HANDLED;
}

public JoinClanName( index )
{
	read_args(kClanName[ index ], CLANNAME_LENGHT-1);
	szRemove_Quotes(kClanName[ index ], kClanName[ index ]);
	trim(kClanName[ index ]);
	
	if( kClanNameConfirmated[ index ])
	{
		client_print( index, print_center, "YOU'VE CONFIRMED CLAN'S NAME!");
		ShowMenuCreateClan( index );
		return;
	}
	
	if( !kClanName[ index ][ 0 ])
	{
		client_print( index, print_chat, " TYPE THE CLAN'S NAME ");
		client_cmd( index, "messagemode ^"JOIN_CLAN_NAME^"");
		return;
	}
	
	static xd; xd = get_membersnum( index );
	
	if( xd )
	{
		client_print( index, print_center, "THIS CLAN NAME IS ALREADY TAKEN");
		kClanName[ index ] = "^0";
		ShowMenuCreateClan( index )
		return;
	}
	
	ShowMenuConfirmateClanName( index );
}

public JoinPassword( index )
{
	read_args(kPassword[ index ], PASSWORD_LENGHT-1);
	szRemove_Quotes(kPassword[ index ], kPassword[ index ]);
	trim(kPassword[ index ]);
	
	if( !kPassword[ index ][ 0 ] || containi( kPassword[ index ], " ") != -1 )
	{
		client_print( index, print_center, "YOUR PASSWORD, CONTAIN ERRORS" );
		client_cmd( index, "messagemode ^"JOIN_PASSWORD^"");
		return;
	}
	
	switch(kStatus[ index ])
	{
		case NOT_REGISTERED:
		{
			client_print( index, print_center, "CONFIRM YOUR PASSWORD TO CONTINUE");
			copy(kPassword2[ index ], PASSWORD_LENGHT-1, kPassword[ index ]);
			
			ShowMenuConfirmatePw( index );
		}
		case REGISTERED: 
		{
			new buffer[PASSWORD_LENGHT];
			adv_vault_get_prepare( vault, _, kPassword[ index ]);
			adv_vault_get_field( vault, kFields[ C_PASS ], buffer, charsmax(buffer));
			
			if(! equal(buffer, kPassword[ index ])) 
			{
				ShowLogMenu( index );
				client_print( index, print_center, "INCORRECT PASSWORD." );
				return;
			}
			
			client_print( index, print_center, "YOU'VE BEEN SUCCESSFULLY LOGGED TO YOUR ACCOUNT");
			ForceJoinTeam( index );
		}
		case LOGGUED: 
		{
			if(flag_get(kBits[CAN_CHANGE_PW], index)) 
			{
				client_print( index, print_center, "YOU HAVE ALREADY CHANGED YOUR PASSWORD ON THIS MAP");
				return;
			}
			
			client_print( index, print_center, "CONFIRM YOUR CURRENT PASSWORD TO CHANGE IT WITH A NEW ONE..." );
			copy(kPassword2[ index ], PASSWORD_LENGHT-1, kPassword[ index ]);
			ShowMenuConfirmatePw( index );
		}
	}
}

/*============================
	MENUS
============================*/

ShowMenuCreateClan( index )
{
	static menu, tittle[MENU_TITTLE_LENGHT], members; members = get_membersnum( index );
	formatex( tittle, MENU_TITTLE_LENGHT-1, "%s CREATE CLAN", MENU_PREFIX );
	menu = menu_create( tittle, "menu_create_hand" );
	
	formatex( tittle, MENU_TITTLE_LENGHT-1, "CLAN NAME: \d%s", kClanName[ index ] );
	menu_additem( menu, (!kClanName[ index ][ 0 ])?"TYPE THE CLAN NAME":tittle, "1" );
	
	formatex( tittle, MENU_TITTLE_LENGHT-1, "ADD MEMBERS... \d( \r%d \y/ \r%d \d)", members, CLAN_MAXMEMBERS);
	menu_additem( menu, (!kClanName[ index ][ 0 ])?"\dADD MEMBERS":tittle, "2" );
	
	menu_additem( menu, (members >= CLAN_MINMEMBERS )?"CREATE CLAN":"\dCREATE CLAN", "3" );
	
	menu_display( index, menu );
}

public menu_create_hand( index, menu, item )
{
	switch( item )
	{
		case MENU_EXIT: { menu_destroy( menu ); return PLUGIN_HANDLED; }
		
		case 0:
		{
			if(!kClanNameConfirmated[ index ] )
			{
				client_print( index, print_center, " TYPE THE CLAN NAME " );
				client_cmd( index, "messagemode ^"JOIN_CLAN_NAME^"" );
				
				return PLUGIN_HANDLED;
			}
			
			client_print( index, print_center, "YOU'VE CONFIRMED CLAN'S NAME" );
			ShowMenuCreateClan( index );
		}
		case 1: 
		{
			if(!kClanName[ index ][ 0 ])
			{
				client_print( index, print_center, "YOU NEED TO CREATE A CLAN'S NAME BEFORE");
				ShowMenuCreateClan( index );
				return PLUGIN_HANDLED;
			}
			
			ShowInviteMenu( index );
		}
		case 2: 
		{
			static members; members = get_membersnum( index );
			
			if(members >= CLAN_MINMEMBERS )
				CreateClan( index );
			else
				client_print( index, print_center, "YOU NEED AT LEAST %d MEMBERS TO CREATE THE CLAN", CLAN_MINMEMBERS );
		}
	}
	
	menu_destroy( menu );
	return PLUGIN_HANDLED;
}

ShowMenuClan( index )
{
	static menu, tittle[ MENU_TITTLE_LENGHT ], members; members = get_membersnum( index );
	formatex( tittle, MENU_TITTLE_LENGHT-1, "%s CLAN MENU: \r%s^n\wMEMBERS: \y%d \d/ \y%d", 
	MENU_PREFIX, kClanName[ index ], members, CLAN_MAXMEMBERS );
	menu = menu_create( tittle, "menu_clan" );
	
	
	switch(kClanMembership[ index ])
	{
		case CLAN_OWNER:
		{
			menu_additem( menu, "VIEW MEMBERS", "1" );
			menu_additem( menu, "KICK MEMBERS", "2" );
			menu_additem( menu, (members >= CLAN_MAXMEMBERS)?"\dINVITE MEMBERS":"INVITE MEMBERS", "3" );
			menu_additem( menu, "EDIT RANK \d( del clan )^n", "4" );
			
			formatex(tittle, MENU_TITTLE_LENGHT-1, "%s \wCLAN CHAT \y( \dPRIVATE CHAT \d^"\rTEAM SAY\d^"\y)", 
			kActivatedClanChat[ index ] ? "\rDISABLE":"\rENABLE");
			menu_additem( menu, tittle, "5");
		}
		case CLAN_BOSS:
		{
			menu_additem( menu, "VIEW MEMBERS", "1" );
			menu_additem( menu, "KICK MEMBERS", "2" );
			menu_additem( menu, (members >= CLAN_MAXMEMBERS)?"\dINVITE MEMBERS":"INVITE MEMBERS", "3" );
			
			formatex(tittle, MENU_TITTLE_LENGHT-1, "%s \wCLAN CHAT \y( \dPRIVATE CHAT \d^"\rTEAM SAY\d^"\y)", 
			kActivatedClanChat[ index ] ? "DISABLE":"ENABLE");
			menu_additem( menu, tittle, "4");
		}
		case CLAN_MEMBER:
		{
			menu_additem( menu, "VIEW MEMBERS^n", "1" );
			
			formatex(tittle, MENU_TITTLE_LENGHT-1, "%s \wCLAN CHAT \y( \dPRIVATE CHAT \d^"\rTEAM SAY\d^"\y)", 
			kActivatedClanChat[ index ] ? "DISABLE":"ENABLE");
			menu_additem( menu, tittle, "2");
		}
	}
	
	menu_display( index, menu );
}

public menu_clan( index, menu, item )
{
	if( item == MENU_EXIT )
	{
		menu_destroy( menu );
		return PLUGIN_HANDLED;
	}
	
	static members; members = get_membersnum( index );
	switch(kClanMembership[ index ])
	{
		case CLAN_OWNER:
		{
			switch( item )
			{
				case 0: ShowClanMembers( index );
				case 1: ShowKickMembersMenu( index );
				case 2: 
				{
					if(members < CLAN_MAXMEMBERS)
					{
						ShowInviteMenu( index );
						return PLUGIN_HANDLED;
					}
					
					Color_Print( index, "MAX NUMBER OF MEMBERS WAS REACHED");
				}
						
				case 3: EditRangesMembers( index );
				case 4: 
				{
					if(kActivatedClanChat[ index ])
					{
						kActivatedClanChat[ index ] = false;
						ShowMenuClan( index );
						return PLUGIN_HANDLED;
					}
					
					kActivatedClanChat[ index ] = true;
					ShowMenuClan( index );
				}
			}
		}
		case CLAN_BOSS:
		{
			switch( item )
			{
				case 0: ShowClanMembers( index );
				case 1: ShowKickMembersMenu( index );
				case 2: 
				{
					if(members < CLAN_MAXMEMBERS)
					{
						ShowInviteMenu( index );
						return PLUGIN_HANDLED;
					}
					
					Color_Print( index, "MAX NUMBER OF MEMBERS WAS REACHED");
				}
				case 3: 
				{
					if(kActivatedClanChat[ index ])
					{
						kActivatedClanChat[ index ] = false;
						ShowMenuClan( index );
						return PLUGIN_HANDLED;
					}
					
					kActivatedClanChat[ index ] = true;
					ShowMenuClan( index );
				}
			}
		}
		case CLAN_MEMBER:
		{
			switch( item )
			{
				case 0: ShowClanMembers( index );
				case 1: 
				{
					if(kActivatedClanChat[ index ])
					{
						kActivatedClanChat[ index ] = false;
						ShowMenuClan( index );
						return PLUGIN_HANDLED;
					}
					
					kActivatedClanChat[ index ] = true;
					ShowMenuClan( index );
				}
			}
		}
	}
	
	menu_destroy( menu );
	return PLUGIN_HANDLED;
}

ShowInviteMenu( index )
{
	static n, menu, pos[3], tittle[MENU_TITTLE_LENGHT];
	formatex( tittle, MENU_TITTLE_LENGHT-1, "%s SEND INVITE TO AFFILIATE NEW MEMBERS", MENU_PREFIX );
	menu = menu_create( tittle, "menu_invite_hand" );
	
	for( n = 1; n <= MAXPLAYERS; ++n )
	{
		if( !flag_get(kBits[CONNECTED], n) ) continue;
		
		if( kClanMembership[ n ] != WITHOUT_CLAN ) continue;
		
		if( index == n ) continue;
		
		num_to_str( n, pos, 2 );
		
		menu_additem( menu, kPlayerName[ n ], pos );
	}
	
	menu_display( index, menu );
}

public menu_invite_hand( index, menu, item )
{
	if( item == MENU_EXIT ) 
	{
		menu_destroy( menu );
		return PLUGIN_HANDLED;
	}
    
	static iKey[ 6 ], iAccess, iCallback;
    
	menu_item_getinfo( menu, item, iAccess, iKey, charsmax( iKey ), _, _, iCallback );
	kInvited[ index ] = str_to_num( iKey );
	
	if( get_membersnum( index ) == CLAN_MAXMEMBERS )
	{
		client_print( index, print_chat, "[CLAN-SYSTEM] YOU HAVE REACHED THE MAX NUMBER OF MEMBERS");
		menu_destroy( menu );
		return PLUGIN_HANDLED;
	}
	
	client_print( index, print_chat, "[CLAN-SYSTEM] YOU'VE INVITED %s TO JOIN YOUR CLAN.", kPlayerName[ kInvited[index] ] );
	client_print( kInvited[ index ], print_chat, "[CLAN-SYSTEM] %s INVITED YOU TO JOIN HIS CLAN: %s", kPlayerName[ index ], kClanName[ index ] );
	
	kClanOwner[ kInvited[ index ] ] = index;
	
	if(is_user_bot( kInvited[ index ] ) )
	{
		kClanMembership[ kInvited[ index ] ] = CLAN_MEMBER;
		copy(kClanName[ kInvited[index] ], CLANNAME_LENGHT-1, kClanName[ index ] );
		client_print( index, print_chat, "[CLAN-SYSTEM] %s HAS ACCEPTED YOUR INVITATION", kPlayerName[ kInvited[index] ] );
		
		DataManagement( kInvited[ index ], SAVE );
		cmd_CLAN( index );
	}
	else	
		ShowMenuInvited( kInvited[ index ] , index );
	
	menu_destroy( menu );
	return PLUGIN_HANDLED;
}

ShowMenuInvited( invited, owner )
{
	static menu, tittle[ MENU_TITTLE_LENGHT ];
	formatex( tittle, MENU_TITTLE_LENGHT-1, "%s \r%s \wHAS SENT YOU AN INVITATION TO JOIN THE CLAN: \y%s",
	MENU_PREFIX, kPlayerName[ owner ], kClanName[ owner ] );
	
	menu = menu_create(tittle, "menu_invited_hand");

	menu_additem( menu, "\yACCEPT", "1");
	
	menu_additem( menu, "\rDECLINE", "2");
	
	menu_setprop( menu, MPROP_EXIT, MEXIT_NEVER );
	
	menu_display( invited, menu );
}

public menu_invited_hand( index, menu, item )
{	
	switch (item)
	{
		case 0: 
		{
			kClanMembership[ index ] = CLAN_MEMBER;
			copy(kClanName[ index ], CLANNAME_LENGHT-1, kClanName[ kClanOwner[index] ]);
			client_print( kClanOwner[ index ], print_chat, "[CLAN-SYSTEM] %s HAS ACCEPTED YOUR REQUEST", kPlayerName[ index ]);
			
			cmd_CLAN( kClanOwner[ index ] );
		}
		case 1: 
		{
			client_print( kClanOwner[ index ], print_chat, "[CLAN-SYSTEM] %s HAS DECLINED YOUR INVITATION", kPlayerName[ index ]);
			
			cmd_CLAN( kClanOwner[ index ] );
			
			kClanMembership[ index ] = WITHOUT_CLAN;
			kClanOwner[ index ] = 0;
			kClanName[ index ] = "^0";
		}
 		
		case MENU_EXIT: { menu_destroy(menu); return PLUGIN_HANDLED; }
	}
	
	menu_destroy(menu);
	
	return PLUGIN_HANDLED;
}

ShowMenuConfirmateClanName( index )
{
	static menu, tittle[ MENU_TITTLE_LENGHT ];
	formatex( tittle, MENU_TITTLE_LENGHT-1, "%s CLAN NAME WILL BE: \d%s", MENU_PREFIX, kClanName[ index ] );
	menu = menu_create( tittle, "menu_confirm_hand" );
	
	menu_additem( menu, "YES, CONTINUE", "1" );
	menu_additem( menu, "NO, CREATE A NEW ONE", "2");
	
	menu_setprop( menu, MPROP_EXIT, MEXIT_NEVER );
	menu_display( index, menu );
}

public menu_confirm_hand( index, menu, item )
{
	switch( item )
	{
		case MENU_EXIT: { menu_destroy(menu); return PLUGIN_HANDLED; }
		
		case 0:
		{
			client_print( index, print_chat, "[CLAN-SYSTEM] CLAN NAME WAS SUCCESSFULLY CREATED." );
			kClanNameConfirmated[ index ] = true;
			DataManagement( index, SAVE );
			ShowMenuCreateClan( index );
		}
		case 1:
		{
			client_print( index, print_chat, " TYPE THE CLAN NAME ");
			client_cmd( index, "messagemode ^"JOIN_CLAN_NAME^"");
		}	
	}
	
	menu_destroy( menu );
	return PLUGIN_HANDLED;
}

ShowClanMembers( index )
{
	static menu, keyindex, szkeyindex[5], item[128], item2[50], tittle[ MENU_TITTLE_LENGHT ];
	formatex( tittle, MENU_TITTLE_LENGHT-1, "%s CLAN'S MEMBERS LIST: \d %s", MENU_PREFIX, kClanName[ index ]);
	menu = menu_create( tittle, "menu_members_hand");
	
	adv_vault_find_start( vault, kFields[ C_CLANNAME ], kClanName[ index ], FINDFLAGS_EQUAL);
    
	while((keyindex = adv_vault_find_next( vault ))) 
	{
		adv_vault_get_field( vault, kFields[ C_PNAME], item2, charsmax(item2) );
		num_to_str( keyindex, szkeyindex, charsmax(szkeyindex) );
		formatex( item, charsmax(item), "%s \d( \y %s \d)", item2, MemberRange[adv_vault_get_field(vault, kFields[C_MEMBERSHIP])] );
		menu_additem( menu, item, szkeyindex);
	}
	
	adv_vault_find_closed( vault );
	
	menu_display( index, menu );
}

public menu_members_hand( index, menu, item )
{
	if( item == MENU_EXIT)
	{
		cmd_CLAN( index );
		menu_destroy( menu );
		return PLUGIN_HANDLED;
	}
	
	static iKey, szitem[5], keyindex;
	menu_item_getinfo( menu, item, iKey, szitem, charsmax(szitem), _, _, iKey );
	keyindex = str_to_num(szitem);
	
	ShowMenuPlayerStats( index, keyindex );
	
	menu_destroy( menu );
	return PLUGIN_HANDLED;
}

ShowMenuPlayerStats( index, keyindex )
{
	new name[32], tittle[ MENU_TITTLE_LENGHT ], menu
	
	if(!adv_vault_get_prepare( vault,  keyindex )) 
		return;
        
	adv_vault_get_field( vault, kFields[ C_PNAME ],  name, 31 );
	formatex( tittle, MENU_TITTLE_LENGHT-1, "%s \wINFORMATION: \y%s \r",  MENU_PREFIX, name );
    
	menu = menu_create( tittle, "menu_playerstats_hand" );
	
	formatex( tittle, MENU_TITTLE_LENGHT-1, "\wCLAN RANK: \y%s", 
	MemberRange[ adv_vault_get_field( vault, kFields[ C_MEMBERSHIP]) ]);
	menu_additem( menu, tittle, "" );
	
	formatex( tittle, MENU_TITTLE_LENGHT-1, "\wGENERAL RANK: \y%s", 
	Rangos[ adv_vault_get_field(vault, kFields[C_RANGE ]) ][ RANGO_NAME ]);
	menu_additem( menu, tittle, "" );
	 
	formatex(tittle, MENU_TITTLE_LENGHT-1, "\wKILLS: \y%d", adv_vault_get_field( vault, kFields[ C_KILLS ]) );
	menu_additem( menu , tittle, "" );
	 
	formatex(tittle, MENU_TITTLE_LENGHT-1, "\wDEATHS: \y%d", adv_vault_get_field( vault, kFields[ C_DEATHS ]) );
	menu_additem( menu, tittle, "" );
	 
	formatex(tittle, MENU_TITTLE_LENGHT-1, "\wHEADSHOT KILLS: \y%d", adv_vault_get_field( vault, kFields[ C_HS_KILLS])  );
	menu_additem( menu, tittle, "");
	 
	formatex(tittle, MENU_TITTLE_LENGHT-1, "\wHEADSHOT DEATHS: \y%d", adv_vault_get_field( vault, kFields[ C_HS_DEATHS])  );
	menu_additem( menu, tittle, "");
	 
	formatex(tittle, MENU_TITTLE_LENGHT-1, "\wKNIFE KILLS: \y%d", adv_vault_get_field( vault, kFields[ C_KNIFE_KILLS ])  );
	menu_additem( menu, tittle, "");
	 
	formatex(tittle, MENU_TITTLE_LENGHT-1, "\wKNIFE DEATHS: \y%d", adv_vault_get_field( vault, kFields[ C_KNIFE_DEATHS])  );
	menu_additem( menu, tittle, "");
	 
	formatex(tittle, MENU_TITTLE_LENGHT-1, "\wSUICIDES: \y%d", adv_vault_get_field( vault, kFields[ C_SUICIDES ]) );
	menu_additem( menu, tittle, "");
	 
	formatex(tittle, MENU_TITTLE_LENGHT-1, "\wRESPAWNS: \y%d", adv_vault_get_field( vault, kFields[ C_SPAWNS ]) );
	menu_additem( menu, tittle, "");
	
	menu_display( index, menu );
}

public menu_playerstats_hand( index, menu, item )
{
	if( item == MENU_EXIT )
	{
		menu_destroy(  menu );
		return PLUGIN_HANDLED;
	}
	
	if(item <  6)
		menu_display( index, menu, 0);
	else
		menu_display( index, menu, 1);
	
	return PLUGIN_HANDLED;
}

ShowKickMembersMenu( index )
{
	static menu, keyindex, szkeyindex[5], item[128], tittle[ MENU_TITTLE_LENGHT ];
	formatex( tittle, MENU_TITTLE_LENGHT-1, "%s KICK MEMBERS OF THE CLAN: \d %s", MENU_PREFIX, kClanName[ index ]);
	menu = menu_create( tittle, "menu_kick_hand");
	
	adv_vault_find_start( vault, kFields[ C_CLANNAME ], kClanName[ index ], FINDFLAGS_EQUAL);
    
	while((keyindex = adv_vault_find_next( vault ))) 
	{
		adv_vault_get_field( vault, kFields[ C_PNAME ], item, charsmax(item) );
		num_to_str( keyindex, szkeyindex, charsmax(szkeyindex) );
		menu_additem( menu, item, szkeyindex);
	}
	
	adv_vault_find_closed( vault );
	
	menu_display( index, menu );
}

public menu_kick_hand( index, menu, item )
{
	if( item == MENU_EXIT)
	{
		cmd_CLAN( index );
		menu_destroy( menu );
		return PLUGIN_HANDLED;
	}
	
	static iKey, szitem[5], keyindex;
	menu_item_getinfo( menu, item, iKey, szitem, charsmax(szitem), _, _, iKey );
	keyindex = str_to_num(szitem);
	
	if(!adv_vault_get_prepare( vault,  keyindex )) 
		return PLUGIN_HANDLED;
		
	static level, name[32]; 
	adv_vault_get_field( vault, kFields[ C_PNAME ], name, 31);
	level = adv_vault_get_field( vault, kFields[ C_MEMBERSHIP]);
	
	if(equal(name, kPlayerName[ index ]) )
	{
		Color_Print( index, "YOU CAN'T KICK YOURSELF");
		ShowMenuClan( index );
		return PLUGIN_HANDLED;
	}
	
	if( level == CLAN_OWNER)
	{
		Color_Print( index, "YOU CAN'T KICK THE FOUNDER");
		ShowMenuClan( index );
		return PLUGIN_HANDLED;
	}
	
	adv_vault_set_start( vault )
	adv_vault_set_field( vault, kFields[ C_CLANNAME ], "^0");
	adv_vault_set_field( vault, kFields[ C_MEMBERSHIP ], WITHOUT_CLAN );
	adv_vault_set_field( vault, kFields[ C_CLAN_CHAT ], false);
	adv_vault_set_end( vault, _, name);
	
	Color_Print(index, "YOU'VE KICKED: %s", name );
	ShowMenuClan( index );
	
	menu_destroy( menu );
	return PLUGIN_HANDLED;
}

EditRangesMembers( index )
{
	static menu, keyindex, szkeyindex[5], item[128], item2[50], tittle[ MENU_TITTLE_LENGHT ];
	formatex( tittle, MENU_TITTLE_LENGHT-1, "%s CLAN'S RANK EDITOR: \d %s", MENU_PREFIX, kClanName[ index ]);
	menu = menu_create( tittle, "menu_ranges_hand");
	
	adv_vault_find_start( vault, kFields[ C_CLANNAME ], kClanName[ index ], FINDFLAGS_EQUAL);
    
	while((keyindex = adv_vault_find_next( vault ))) 
	{
		adv_vault_get_field( vault, kFields[ C_PNAME], item2, charsmax(item2) );
		num_to_str( keyindex, szkeyindex, charsmax(szkeyindex) );
		formatex( item, charsmax(item), "%s \d( \y %s \d)", item2, MemberRange[adv_vault_get_field(vault, kFields[C_MEMBERSHIP])] );
		menu_additem( menu, item, szkeyindex);
	}
	
	adv_vault_find_closed( vault );
	
	menu_display( index, menu );
}

public menu_ranges_hand( index, menu, item )
{
	if( item == MENU_EXIT)
	{
		cmd_CLAN( index );
		menu_destroy( menu );
		return PLUGIN_HANDLED;
	}
	
	static iKey, szitem[5], keyindex;
	menu_item_getinfo( menu, item, iKey, szitem, charsmax(szitem), _, _, iKey );
	keyindex = str_to_num(szitem);
	
	if(!adv_vault_get_prepare( vault,  keyindex )) 
		return PLUGIN_HANDLED;
		
	static level, name[32]; 
	adv_vault_get_field( vault, kFields[ C_PNAME ], name, 31);
	level = adv_vault_get_field( vault, kFields[ C_MEMBERSHIP]);
	
	if(equal(name, kPlayerName[ index ]) )
	{
		Color_Print( index, "YOU CAN'T CHANGE YOUR RANK");
		ShowMenuClan( index );
		return PLUGIN_HANDLED;
	}
	
	if( level == CLAN_OWNER)
	{
		Color_Print( index, "YOU CAN'T CHANGE FOUNDER'S RANK");
		ShowMenuClan( index );
		return PLUGIN_HANDLED;
	}
	
	adv_vault_set_start( vault )

	if( level == CLAN_MEMBER )
		adv_vault_set_field( vault, kFields[ C_MEMBERSHIP ], CLAN_BOSS );
	else if( level == CLAN_BOSS )
		adv_vault_set_field( vault, kFields[ C_MEMBERSHIP ], CLAN_MEMBER );
	
	adv_vault_set_end( vault, _, name);
	
	Color_Print(index, "YOU'VE CHANGED THE RANK OF: %s", name );
	ShowMenuClan( index );
	
	menu_destroy( menu );
	return PLUGIN_HANDLED;
}

/*	ACCOUNT SYSTEM		*/

ShowLogMenu( index) 
{
	static menu, tittle[MENU_TITTLE_LENGHT];
	formatex(tittle, MENU_TITTLE_LENGHT-1, "Account system by \dkikizon^n\wWelcome \r%s^n\wSTATS: \r%s^n\wYOUR LAST VISIT WAS: \r%s", 
	kPlayerName[ index ], Status[ kStatus[ index ] ], kDate[ index ] );
	
	menu = menu_create( tittle, "menu_log_hand" );
	
	menu_additem(menu, (kStatus[ index ] == REGISTERED ) ? "LOG IN":"\dLOG IN", "1" );
	menu_additem(menu, (kStatus[ index ] == NOT_REGISTERED ) ? "REGISTER^n":"\dREGISTER^n", "2" );
	menu_additem(menu, (kStatus[ index ] == LOGGUED && !flag_get(kBits[CAN_CHANGE_PW],index)) ? "CHANGE PASSWORD":"\dCHANGE PASSWORD", "3" );
	
	menu_setprop( menu, MPROP_EXIT, MEXIT_NEVER );
	
	menu_display( index, menu );
}

public menu_log_hand( index, menu, item )
{
	switch( item )
	{
		case 0: 
		{
			if(kStatus[ index ] == REGISTERED)
			{
				client_print( index, print_center, "CONFIRM THE PASSWORD TO JOIN YOUR ACCOUNT" );
				client_cmd( index,"messagemode ^"JOIN_PASSWORD^"" );
			} 
			else 
			{
				client_print( index, print_center, "YOU CAN'T USE THIS OPTION");
				ShowLogMenu( index );
				return PLUGIN_HANDLED;
			}
		}
		case 1: 
		{
			if(kStatus[ index ] == NOT_REGISTERED )
			{
				client_print( index, print_center, "TYPE A PASSWORD TO CREATE A NEW ACCOUNT" );
				client_cmd( index ,"messagemode ^"JOIN_PASSWORD^"" );
			} 
			else 
			{
				client_print( index, print_center, "YOU CAN'T USE THIS OPTION" );
				ShowLogMenu( index );
				return PLUGIN_HANDLED;
			}	
		}
		case 2: 
		{
			if(kStatus[ index ] == LOGGUED && !flag_get(kBits[CAN_CHANGE_PW],index))
			{
				client_print( index, print_center, "CONFIRM YOUR NEW PASSWORD" );
				client_cmd( index,"messagemode ^"JOIN_PASSWORD^"");
			} 
			else 
			{
				client_print( index, print_center, "YOU ARE NOT LOGGED OR YOU'VE CHANGED YOUR PASSWORD DURING THIS MAP" );
				ShowLogMenu( index );
				return PLUGIN_HANDLED;
			}
		}
		
		case MENU_EXIT: { menu_destroy( menu ); return PLUGIN_HANDLED; }
	}
	
	menu_destroy( menu );
	return PLUGIN_HANDLED;
}

ShowMenuConfirmatePw( index )
{
	static menu, Tit[ MENU_TITTLE_LENGHT ];
	formatex( Tit, MENU_TITTLE_LENGHT-1,"PASSWORD WILL BE \r%s^n^n\yCONFIRM?", kPassword2[ index ]);
	
	menu = menu_create( Tit, "menu_confirmpw_hand" );
	
	menu_additem( menu,"\rYES\w, CONFIRM","1" );
	menu_additem( menu,"\rNO\w, TYPE A NEW ONE","2" );
	
	menu_setprop( menu, MPROP_EXIT, MEXIT_NEVER );
	
	menu_display( index, menu );
}

public menu_confirmpw_hand( index, menu, item )
{
	switch(item) 
	{
		case 0: 
		{
			if( kStatus[ index ] == LOGGUED )
			{
				copy(kPassword[ index ], PASSWORD_LENGHT-1, kPassword2[ index ]);
				DataManagement( index, SAVE );
				client_print( index, print_center, "YOUR PASSWORD HAS BEEN CHANGED SUCCESSFULLY");
				flag_set(kBits[CAN_CHANGE_PW], index);
			}
			else 
			{
				copy(kPassword[ index ], PASSWORD_LENGHT-1, kPassword2[ index ]);
				client_print( index, print_center, "YOUR NEW ACCOUNT HAS BEEN CREATED" );
				DataManagement( index, SAVE );
				ForceJoinTeam( index );
			}
		}
		case 1: 
		{
			menu_destroy(menu);
			
			client_cmd( index, "messagemode ^"JOIN_PASSWORD^"" );
			
			if( kStatus[ index ] == LOGGUED )
				client_print( index, print_center, "TYPE YOUR NEW PASSWORD" );
			else
				client_print( index, print_center, "TYPE THE PASSWORD OF YOUR NEWEST ACCOUNT" );
		}
		
		case MENU_EXIT: { menu_destroy( menu ); return PLUGIN_HANDLED; }
	}
	
	menu_destroy( menu );
	return PLUGIN_HANDLED;
}

/*============================
	STOCKS
============================*/

stock szRemove_Quotes( const szStr[ ], szOut[ ] )
{
	if ( !szStr[ 1 ]  )
	{
		szOut[ 0 ] = EOS;
		return 0;
	}
	
	copy( szOut, strlen( szStr )-2, szStr[ 1 ] );
	trim( szOut );
	
	static iLen, i;
	iLen = strlen( szOut );
	
	for ( i = 0; i < iLen; ++i)
	{
		if (szOut[ i ] == '"')
			return 0;
	}
	
	return iLen;
}

stock ValidMessage(text[], maxcount) 
{
	static len, i, count;
	len = strlen(text);
	count = 0;
    
	if (!len) return false;
    
	for (i = 0; i < len; ++i) 
	{
		if (text[i] != ' ') 
		{
			++count;
			
			if (count >= maxcount)
				return true;
		}
	}
    
	return false;
}

public changeTeamInfo(player, team[])
{
	message_begin(MSG_ONE, kMsg[MSG_TEAMINFO], _, player);
	write_byte(player);
	write_string(team);
	message_end();
}

public writeMessage(player, message[])
{
	message_begin(MSG_ONE, kMsg[MSG_SAYTEXT], {0, 0, 0}, player);
	write_byte(player);
	write_string(message);
	message_end();
}

stock Color_Print(const id, const input[], any:...)
{	
	new count = 1, players[32];
	static msg[191], len;
	
	len = formatex(msg, charsmax(msg), "%s ", CHAT_PREFIX);
	vformat(msg[len], 190 - len, input, 3);
	
	replace_all(msg, 190, "!g", "^4");
	replace_all(msg, 190, "!n", "^1");
	replace_all(msg, 190, "!t", "^3");
	
	
	if(id) 
		players[0] = id;
	else 
		get_players(players, count, "ch");
         	
	for (new i = 0; i < count; ++i)
	{
		if(flag_get(kBits[CONNECTED], players[i]))
		{
			message_begin(MSG_ONE_UNRELIABLE, kMsg[MSG_SAYTEXT], _, players[i]);  
			write_byte(players[i]);
			write_string(msg);
			message_end();				
		}		
	}

}

public message_VGUImenu( msgid, dest, index ) 
{
	if( kStatus[ index ] != LOGGUED )
		ShowLogMenu( index );

	return 1;
}

public DataManagement( index, type )
{
	if( !flag_get(kBits[CONNECTED],index) ) return;
	
	if(type == LOAD)
	{
		if( !adv_vault_get_prepare( vault, _, kPlayerName[ index ] ) ) 
		{
			kStatus[ index ] = NOT_REGISTERED;
			return;
		} 
		else 
		{
			kStatus[ index ] = REGISTERED;
			
			kClanMembership[ index ] = adv_vault_get_field( vault, kFields[ C_MEMBERSHIP ] );
			adv_vault_get_field( vault, kFields[ C_CLANNAME ], kClanName[ index ], CLANNAME_LENGHT );
			adv_vault_get_field( vault, kFields[ C_DATE ], kDate[ index ], 31);
			adv_vault_get_field( vault, kFields[ C_PASS ], kPassword[ index ], PASSWORD_LENGHT-1);
			adv_vault_get_field( vault, kFields[ C_PNAME ], kPname[ index ], 31 );
			kDataRank[ index ][ KILLS ] = adv_vault_get_field( vault, kFields[ C_KILLS ] );
			kDataRank[ index ][ DEATHS ] = adv_vault_get_field( vault, kFields[ C_DEATHS ] );
			kDataRank[ index ][ HS_KILLS ] = adv_vault_get_field( vault, kFields[ C_HS_KILLS ] );
			kDataRank[ index ][ HS_DEATHS ] = adv_vault_get_field( vault, kFields[C_HS_DEATHS ] );
			kDataRank[ index ][ KNIFE_KILLS ] = adv_vault_get_field( vault, kFields[C_KNIFE_KILLS ] );
			kDataRank[ index ][ KNIFE_DEATHS ] = adv_vault_get_field( vault, kFields[C_KNIFE_DEATHS ] );
			kDataRank[ index ][ SUICIDES ] = adv_vault_get_field( vault, kFields[C_SUICIDES ] );
			kDataRank[ index ][ SPAWNS ] = adv_vault_get_field( vault, kFields[C_SPAWNS ] );
			kActivatedClanChat[ index ] = adv_vault_get_field( vault, kFields[ C_CLAN_CHAT ] );
		}
	}
	else
	{
		copy(kPname[ index ], 31, kPlayerName[ index ]);
		adv_vault_set_start( vault );
		
		adv_vault_set_field( vault, kFields[ C_MEMBERSHIP ], kClanMembership[ index ] );
		adv_vault_set_field( vault, kFields[ C_CLANNAME ], kClanName[ index ] );
		adv_vault_set_field( vault, kFields[ C_DATE ], kDate[ index ]);
		adv_vault_set_field( vault, kFields[ C_PASS ], kPassword[ index ]);
		adv_vault_set_field( vault, kFields[ C_PNAME ], kPname[ index ]);
		adv_vault_set_field( vault, kFields[ C_KILLS ], kDataRank[ index ][ KILLS ]);
		adv_vault_set_field( vault, kFields[ C_DEATHS ], kDataRank[ index ][DEATHS]);
		adv_vault_set_field( vault, kFields[ C_HS_KILLS ], kDataRank[ index ][ HS_KILLS ]);
		adv_vault_set_field( vault, kFields[ C_HS_DEATHS ], kDataRank[ index ][ HS_DEATHS ]);
		adv_vault_set_field( vault, kFields[ C_KNIFE_KILLS ], kDataRank[ index ][ KNIFE_KILLS ]);
		adv_vault_set_field( vault, kFields[ C_KNIFE_DEATHS], kDataRank[ index ][ KNIFE_DEATHS ]);
		adv_vault_set_field( vault, kFields[ C_SUICIDES], kDataRank[ index ][ SUICIDES ]);
		adv_vault_set_field( vault, kFields[ C_SPAWNS ], kDataRank[ index ][ SPAWNS ]);
		adv_vault_set_field( vault, kFields[ C_CLAN_CHAT ], kActivatedClanChat[ index ] );
		
		adv_vault_set_end( vault, 0, kPlayerName[ index ] );
	}
}

public fm_ClientInfoChanged( index, buffer )
{
	if( flag_get(kBits[CONNECTED],index) ) 
	{
		if(kStatus[ index ] == LOGGUED)
		{
			static OldName[33];
			
			engfunc(EngFunc_InfoKeyValue, buffer, "name", OldName, sizeof OldName - 1);
			
			if(equal(OldName, kPlayerName[ index ])) 
				return FMRES_IGNORED;
			
			set_user_info( index, "name", kPlayerName[ index ]);
			client_cmd( index, "setinfo ^"name^" ^"%s^"", kPlayerName[ index ]);
		}
	}
	
	return FMRES_IGNORED;	
}

public ForceJoinTeam( index )
{
	static teammsg_block, teammsg_block_vgui, restore, vgui;
	
	restore = get_pdata_int( index, 510 );
	vgui = restore & (1<<0);
	
	if ( vgui ) set_pdata_int( index, 510, restore & ~(1<<0) );
	
	teammsg_block = get_msg_block( kMsg[MSG_SHOWMENU] );
	teammsg_block_vgui = get_msg_block( kMsg[MSG_VGUI] );
	
	set_msg_block( kMsg[MSG_SHOWMENU], BLOCK_ONCE );
	set_msg_block( kMsg[MSG_VGUI], BLOCK_ONCE );
	
	engclient_cmd( index, "jointeam", "5" );
	engclient_cmd( index, "joinclass", "5" );
	
	set_msg_block( kMsg[MSG_SHOWMENU], teammsg_block);
	set_msg_block( kMsg[MSG_VGUI], teammsg_block_vgui);
	
	if (vgui) set_pdata_int( index, 510, restore );
		
	kStatus[ index ] = LOGGUED;
	
	set_task( 1.0, "ShowHUD", index + TASK_HUD, _, _, "b" );
}

public ShowHUD( taskid )
{
	static index; index =  ID_HUD;
	
	if ( !is_user_alive(index) )
	{
		index = pev( index, pev_iuser2 );
		
		if ( !flag_get(kBits[ALIVE],index))  return;
	}
	
	
	if( index != ID_HUD)
	{
		set_hudmessage(255, 200, 220, 0.60, 0.50, 0, 6.0, 1.1, 0.0, 0.0, -1);
		ShowSyncHudMsg(index, hudSync, "%s^nCLAN: %s || RANK: %s", 
		kPlayerName[ index ], kClanName[index][0]?kClanName[index]:"Sin Clan", Rangos[kRange[index]][RANGO_NAME] );
	}
	else
	{
		set_hudmessage(0, 255, 0, 0.0, 0.0, 0, 6.0, 1.1, 0.0, 0.0, -1);
		ShowSyncHudMsg(index, hudSync, "RANK: %s^nCLAN: %s^nFRAGS: %d / %d", 
		Rangos[ kRange[index] ][ RANGO_NAME ], kClanName[ index ][0]?kClanName[ index ]:"NO CLAN", kDataRank[ index ][ KILLS ], Rangos[ kRange[index] ][ RANGO_FRAGS ] );
	}
}

UpdateRange( index )
{
	static range; range = kRange[ index ];
	
	while( kDataRank[ index ][ KILLS ] >=Rangos[ kRange[index] ][ RANGO_FRAGS ])
		++kRange[ index ];
		
	if(kRange[ index ] > range )
		Color_Print( index, "CONGRATS, YOU'VE PASSED TO: !g%s", Rangos[ kRange[index] ][RANGO_NAME]);
}

public get_membersnum( index )
{
	if( !kClanName[ index ][ 0 ]) return 0;
	
	static num, keyindex, keyname[32]; num = 0;

	adv_vault_find_start( vault, kFields[ C_CLANNAME ], kClanName[ index ], FINDFLAGS_EQUAL );
	
	while((keyindex = adv_vault_find_next( vault )))
	{
		adv_vault_get_keyname( vault, keyindex, keyname, 31 );
		++num;
	}
	
	adv_vault_find_closed( vault );
	
	if(!num) return 0;
	
	return num;
}

CreateClan( index )
{
	if(!flag_get(kBits[CONNECTED],index) ) return;
	
	kClanMembership[ index ] = CLAN_OWNER;
	
	DataManagement( index, SAVE );
	 
	cmd_CLAN( index );
}
RoyalServer
User avatar
levin
Scripter eXtreamCS
Scripter eXtreamCS
Posts: 3844
Joined: 24 Aug 2011, 12:24
Detinator Steam: Da
CS Status:
Detinator server CS: ☯∴
SteamID: riseofevo
Reputatie: Scripter eXtreamCS
Nume anterior: Adryyy
Location: ҳ̸Ҳ̸ҳ
Discord: devilclass
Has thanked: 36 times
Been thanked: 594 times
Contact:

16 Sep 2020, 22:59

ce tag?
Pentru ajutor, faceți cerere bine detaliată, completând și respectând modelul corespunzător.
Nu-mi mai dați cereri doar pentru a mă avea în lista de prieteni.
Dacă te ajut, și mă ignori/etc > te adaug în „foe”.
Aveți grijă la cei ce încearcă să mă copieze sau să dea drept mine..Puteți lua legătura cu mine prin STEAM dacă aveți o problemă/nelămurire în acest caz! Cont de forum am doar aici.
În cazul în care utilizați ceva din ce am postat(ex: aici), e bine să fiți la curent cu modificările aduse și de aici, iar dacă sunt ceva probleme nu ezitați să luați legătura cu mine. Actualizarea unor coduri nu se vor afișa public, doar dacă se găsește ceva critic/urgent de remediat, unele fiind coduri vechi iar unele refăcute chiar recent dar private.
* Nume pe cs1.6: eVoLuTiOn \ Nume vechi: eVo
* Atelierul meu - post2819572.html#p2819572 (închis, click link ca să vedeți de ce)
User avatar
limbaa
Membru, skill 0
Membru, skill 0
Posts: 33
Joined: 26 Oct 2015, 11:25
Detinator Steam: Da
Detinator server CS: GOX.BLACKGAMES.RO
SteamID: tenlimba96
Fond eXtream: 0
Discord: GaBy#1976
Has thanked: 4 times
Contact:

17 Sep 2020, 06:51

Cand intri într-un clan ti se pune tag cu clanul in care esti , dar și cand nu esti in clan ti se pune tag-ul (no clan), vreau sa le scot ca imi afecteaza toate comenzile cu / si tag-urile de la modul lui zorken.
User avatar
levin
Scripter eXtreamCS
Scripter eXtreamCS
Posts: 3844
Joined: 24 Aug 2011, 12:24
Detinator Steam: Da
CS Status:
Detinator server CS: ☯∴
SteamID: riseofevo
Reputatie: Scripter eXtreamCS
Nume anterior: Adryyy
Location: ҳ̸Ҳ̸ҳ
Discord: devilclass
Has thanked: 36 times
Been thanked: 594 times
Contact:

21 Sep 2020, 22:19

care tag......unde se pune?
Pentru ajutor, faceți cerere bine detaliată, completând și respectând modelul corespunzător.
Nu-mi mai dați cereri doar pentru a mă avea în lista de prieteni.
Dacă te ajut, și mă ignori/etc > te adaug în „foe”.
Aveți grijă la cei ce încearcă să mă copieze sau să dea drept mine..Puteți lua legătura cu mine prin STEAM dacă aveți o problemă/nelămurire în acest caz! Cont de forum am doar aici.
În cazul în care utilizați ceva din ce am postat(ex: aici), e bine să fiți la curent cu modificările aduse și de aici, iar dacă sunt ceva probleme nu ezitați să luați legătura cu mine. Actualizarea unor coduri nu se vor afișa public, doar dacă se găsește ceva critic/urgent de remediat, unele fiind coduri vechi iar unele refăcute chiar recent dar private.
* Nume pe cs1.6: eVoLuTiOn \ Nume vechi: eVo
* Atelierul meu - post2819572.html#p2819572 (închis, click link ca să vedeți de ce)
User avatar
limbaa
Membru, skill 0
Membru, skill 0
Posts: 33
Joined: 26 Oct 2015, 11:25
Detinator Steam: Da
Detinator server CS: GOX.BLACKGAMES.RO
SteamID: tenlimba96
Fond eXtream: 0
Discord: GaBy#1976
Has thanked: 4 times
Contact:

22 Sep 2020, 17:45

cred ca aici

Code: Select all

	static color[11], prefix[111], range[64];
	get_user_team(index, color, charsmax(color));
	
	formatex(range, charsmax(range), "^x03(^x04 %s^x04 %s^x03)", Rangos[kRange[index]][RANGO_NAME], kClanName[ index ][ 0 ] ? kClanName[ index ] : "NO CLAN" );
	formatex(prefix, charsmax(prefix), "%s%s^x03 %s", flag_get(kBits[ALIVE],index)?"^x01":"^x01*DEAD* ", range, kPlayerName[index]);
    
	if (is_user_admin(index)) format(said, charsmax(said), "^x04%s", said);
    
	format(said, charsmax(said), "%s^x01 : %s", prefix, said);
    
	static i, team[11];

Dar sincer as fi mai interesat de acest plugin este tot un clan system dar mult mai sofisticat cu war clan cu medalii etc.
User avatar
levin
Scripter eXtreamCS
Scripter eXtreamCS
Posts: 3844
Joined: 24 Aug 2011, 12:24
Detinator Steam: Da
CS Status:
Detinator server CS: ☯∴
SteamID: riseofevo
Reputatie: Scripter eXtreamCS
Nume anterior: Adryyy
Location: ҳ̸Ҳ̸ҳ
Discord: devilclass
Has thanked: 36 times
Been thanked: 594 times
Contact:

23 Sep 2020, 22:37

adică din chat să l scot nu?

Code: Select all

#include < amxmodx >
#include < amxmisc >
#include < hamsandwich >
#include < fakemeta >
#include < adv_vault >//nu e ok

#pragma tabsize 0

/*	====== START EDIT SECTION ======	*/

// Aici setezi numarul maxim de jucatori care se pot conecta la serverul tau
#define MAXPLAYERS 32

#define CLANNAME_LENGHT 20
#define CLAN_MAXMEMBERS 5
#define CLAN_MINMEMBERS 2
#define MENU_TITTLE_LENGHT 128
#define PASSWORD_LENGHT 50

new const MENU_PREFIX[ ] = "\r[ \yAMXX \dCLAN \ySYSTEM \r]\w";
new const CHAT_PREFIX[ ] = "!g[ CLAN SYSTEM ]!n";

/*	==== END EDIT SECTION ====	*/

#define MP MAXPLAYERS+1

#define flag_get(%1,%2)		(%1 & (1 << (%2 & 31)))
#define flag_set(%1,%2)		(%1 |= (1 << (%2 & 31)))
#define flag_unset(%1,%2)		(%1 &= ~(1 << (%2 & 31)))

#define TASK_HUD 1000
#define ID_HUD ( taskid - TASK_HUD )

enum 
{ 
	C_MEMBERSHIP, C_CLANNAME, C_DATE, C_PASS, C_PNAME, C_KILLS, C_DEATHS, C_HS_KILLS, C_HS_DEATHS,
	C_KNIFE_KILLS, C_KNIFE_DEATHS, C_SUICIDES, C_SPAWNS, C_RANGE, C_CLAN_CHAT,
	
	C_MAX
}

enum { WITHOUT_CLAN = 0, CLAN_MEMBER, CLAN_BOSS, CLAN_OWNER, MAX_MEMBER_RANGES }
enum { LOAD= 0, SAVE }
enum _:RANGES { RANGO_NAME[ 50 ], RANGO_FRAGS }
enum { NOT_REGISTERED = 0, REGISTERED, LOGGUED, MAX_STATUS }
enum _:DATA_RANK { KILLS, DEATHS, HS_KILLS, HS_DEATHS, KNIFE_KILLS, KNIFE_DEATHS, SUICIDES, SPAWNS }
enum _:BITS { CONNECTED, ALIVE, CAN_CHANGE_PW }
enum _:MSGS { MSG_VGUI, MSG_SHOWMENU, MSG_SAYTEXT/*, MSG_TEAMINFO*/ }
	
new const P_NAME[ ] = "CLAN SYSTEM";
new const P_VERSION[ ] = "1.1b";
new const P_AUTOR[ ] = "kikizon";

new kBits[BITS], kMsg[MSGS];

new kClanMembership[ MP ], kRange[ MP ], kActivatedClanChat[ MP ];

new kInvited[ MP ], kClanOwner[ MP ], kDataRank[ MP ][ DATA_RANK ];

new kClanName[ MP ][ CLANNAME_LENGHT ], kClanNameConfirmated[ MP ];

new kPlayerName[ MP ][ 32 ], kPname[ MP ][ 32 ];

new vault, kFields[ C_MAX ], kPassword[ MP ][ PASSWORD_LENGHT ], kPassword2[ MP ][ PASSWORD_LENGHT ], kDate[ MP ][ 32 ], kStatus[ MP ];

new  hudSync;

new const Status[ MAX_STATUS ][ ] = { "UNREGISTERED", "REGISTERED", "LOGGED" };
new const MemberRange[ MAX_MEMBER_RANGES ][ ] = { "NO CLAN", "MEMBER", "BOSS", "FOUNDER" };

new const Rangos[][RANGES] = 
{
	{ "", 0 },
	{ "Beginner", 100 },
	{ "Silver I", 200 },
	{ "Silver II", 300 },
	{ "Silver III", 500 },
	{ "Silver IV", 700 },
	{ "Silver Elite", 800 },
	{ "Silver Elite Master", 900 },
	{ "Gold Nova I", 1000 },
	{ "Gold Nova II", 1200 },
	{ "Gold Nova III", 1300 },
	{ "Gold Nova Master", 1400 },
	{ "Master Guardian I",1500 },
	{ "Master Guardian II", 1700 },
	{ "Master Guardian Elite", 1800 },
	{ "Distinguished Master Guardian", 1900 },
	{ "Legendary Eagle", 2000 },
	{ "Legendary Eagle Master", 2100 },
	{ "Supreme Master First Class", 2200 },
	{ "The Global Elite", 2500 }
};


/*	================	*/

public plugin_init() 
{
	register_plugin( P_NAME, P_VERSION, P_AUTOR );
	
	register_event("DeathMsg", "ev_DeathMsg", "a");
	
	RegisterHam(Ham_Killed, "player", "ham_PlayerKilledPost", true );
	RegisterHam(Ham_Spawn, "player", "ham_PlayerSpawnPost", true );
	
	register_forward( FM_ClientUserInfoChanged, "fm_ClientInfoChanged" );
	
	/*register_clcmd( "say", "Block_Say" );
	register_clcmd( "say_team", "Block_TeamSay" );*/
	register_clcmd( "say /clan", "cmd_CLAN" );
	register_clcmd("say /claninfo", "INFORMATII")
	register_clcmd("say","hook_say"); 
	register_clcmd( "JOIN_CLAN_NAME", "JoinClanName" );
	register_clcmd( "JOIN_PASSWORD", "JoinPassword" );
	
	
	kMsg[MSG_VGUI] = get_user_msgid("VGUIMenu");
	kMsg[MSG_SHOWMENU] = get_user_msgid("ShowMenu");
	kMsg[MSG_SAYTEXT] = get_user_msgid("SayText");
	//kMsg[MSG_TEAMINFO] = get_user_msgid("TeamInfo");
	//register_message(kMsg[MSG_VGUI], "message_VGUImenu");
	//register_message(kMsg[MSG_SHOWMENU], "message_VGUImenu");
	
	
	hudSync = CreateHudSyncObj();
	
	
	vault = adv_vault_open( "CLAN_SYSTEM", true );
	 
	kFields[ C_MEMBERSHIP ] = adv_vault_register_field( vault, "AFFILIATION");
	kFields[ C_CLANNAME ] = adv_vault_register_field( vault, "CLAN NAME", DATATYPE_STRING, CLANNAME_LENGHT-1 );
	kFields[ C_DATE ] = adv_vault_register_field( vault, "DATE", DATATYPE_STRING, 32 );
	kFields[ C_PASS ] = adv_vault_register_field( vault, "PASSWORD", DATATYPE_STRING, PASSWORD_LENGHT-1 );
	kFields[ C_PNAME ] = adv_vault_register_field( vault, "NAME", DATATYPE_STRING, 31 );
	kFields[ C_KILLS ] = adv_vault_register_field( vault, "KILLS" );
	kFields[ C_DEATHS ] = adv_vault_register_field( vault, "DEATHS" );
	kFields[ C_HS_KILLS ] = adv_vault_register_field( vault, "HS KILLS" );
	kFields[ C_HS_DEATHS ] = adv_vault_register_field( vault, "HS DEATHS" );
	kFields[ C_KNIFE_KILLS ] = adv_vault_register_field( vault, "KNIFE KILLS" );
	kFields[ C_KNIFE_DEATHS ] = adv_vault_register_field( vault, "KNIFE DEATHS" );
	kFields[ C_SUICIDES ] = adv_vault_register_field( vault, "SUICIDES" );
	kFields[ C_SPAWNS ] = adv_vault_register_field( vault, "RESPAWNS" );
	kFields[ C_RANGE ] = adv_vault_register_field( vault, "RANG" );
	kFields[ C_CLAN_CHAT ] = adv_vault_register_field( vault, "CLANCHAT" );
	
	adv_vault_init( vault );
}

public hook_say(id) {
	static s_Args[192]; 
	
	read_argv(1, s_Args, sizeof(s_Args) - 1); 
	
	if(equal(s_Args, "/", 1)) {
		return PLUGIN_HANDLED;
	}
	return PLUGIN_CONTINUE;
}

public INFORMATII(id)
{
	show_motd(id, "cstrike/addons/amxmodx/configs/claninfo.txt")
}


public client_putinserver( index )
{
	flag_set(kBits[CONNECTED], index);
	get_user_name( index, kPlayerName[ index ], 31 );
	get_time( "%c", kDate[ index ], 31);
	
	kClanMembership[ index ] = WITHOUT_CLAN;
	kClanName[ index ] = "^0";
	kPassword[ index ] = "^0";
	kClanNameConfirmated[ index ] = false;
	kRange[ index  ] = 0;
	kActivatedClanChat[ index ] = false;
	
	DataManagement( index, LOAD );
}

public client_disconnect( index )
{
	remove_task( index+TASK_HUD );
	DataManagement( index, SAVE );
	
	flag_unset(kBits[CONNECTED], index);
}

/*public Block_Say(index)
{
	static said[191];
	read_args(said, charsmax(said)); 
	szRemove_Quotes(said, said);
	replace_all(said, charsmax(said), "%", ""); 
	replace_all(said, charsmax(said), "#", "");
    
	if (!ValidMessage(said, 1)) return PLUGIN_CONTINUE;
    
	static color[11], prefix[111], range[64];
	get_user_team(index, color, charsmax(color));
	
	formatex(range, charsmax(range), "^x03(^x04 %s^x04 %s^x03)", Rangos[kRange[index]][RANGO_NAME], kClanName[ index ][ 0 ] ? kClanName[ index ] : "NO CLAN" );
	formatex(prefix, charsmax(prefix), "%s%s^x03 %s", flag_get(kBits[ALIVE],index)?"^x01":"^x01*DEAD* ", range, kPlayerName[index]);
    
	if (is_user_admin(index)) format(said, charsmax(said), "^x04%s", said);
    
	format(said, charsmax(said), "%s^x01 : %s", prefix, said);
    
	static i, team[11];
	
	for (i = 1; i <= MAXPLAYERS; ++i)
	{
		if (!flag_get(kBits[CONNECTED],i)) continue;

		if (is_user_admin(i) || flag_get(kBits[ALIVE],index) && flag_get(kBits[ALIVE],i) || !flag_get(kBits[ALIVE],index) && !flag_get(kBits[ALIVE],i))
		{
			get_user_team(i, team, charsmax(team));
			changeTeamInfo(i, color);
			writeMessage(i, said);
			changeTeamInfo(i, team);
		}
	}
    
	return PLUGIN_HANDLED_MAIN;
}
public Block_TeamSay(index)
{
	static said[191];
	read_args(said, 190); 
	szRemove_Quotes( said, said );
	replace_all(said, 190, "%", ""); 
	replace_all(said, 190, "#", "");
	
	if(kActivatedClanChat[ index ] )
	{
		if(!ValidMessage(said, 1) || kClanMembership[ index ] == WITHOUT_CLAN)
		{
			Color_Print( index, "Your message is no valid or you are not in a clan yet.");
			return PLUGIN_HANDLED;
		}
	
		static i, team[11], color[11], range[128], prefix[111]; 
		get_user_team(index, color, charsmax(color));
		
		formatex(range, charsmax(range), "^x03(^x01 PRIVATE CHAT:^x04 %s ^x03)", kClanName[ index ]);
		formatex(prefix, charsmax(prefix), "%s%s^x03 %s", flag_get(kBits[ALIVE],index)?"^x01":"^x01*DEAD* ", range, kPlayerName[index]);
    
		if (kClanMembership[ index ] == CLAN_OWNER || kClanMembership[ index ] == CLAN_BOSS) format(said, charsmax(said), "^x04%s", said);
	
		format(said, charsmax(said), "%s^x01 : %s", prefix, said);
	
		for (i = 1; i <= MAXPLAYERS; ++i)
		{
			if (!flag_get(kBits[CONNECTED],i)) continue;

			if ( equal(kClanName[ index ], kClanName[ i ]) )
			{
				get_user_team(i, team, charsmax(team));
				changeTeamInfo(i, color);
				writeMessage(i, said);
				changeTeamInfo(i, team);
			}
		}
	}
	else
	{
		if (!ValidMessage(said, 1)) return PLUGIN_CONTINUE;

		static playerTeam, playerTeamName[19];
		playerTeam = get_user_team(index);
    
		switch (playerTeam)
		{
			case 1: copy (playerTeamName, 6, "^x03 * CT *");
			case 2: copy (playerTeamName, 8, "^x03 * TT *");
			default: copy (playerTeamName, 11, "* SPEC *");
		}
    
		static color[11], prefix[111], range[128];
		get_user_team(index, color, charsmax(color));
	
		formatex(range, charsmax(range), "^x03(^x04 %s^x04 %s^x03)", Rangos[kRange[index]][RANGO_NAME], kClanName[ index ][ 0 ] ? kClanName[ index ] : "NO CLAN" );
		formatex(prefix, charsmax(prefix), "%s%s %s^x03 %s", flag_get(kBits[ALIVE],index)?"^x01":"^x01*DEAD* ", playerTeamName, range, kPlayerName[index]);
    
		if (is_user_admin(index)) format(said, charsmax(said), "^x04%s", said);
    
		format(said, charsmax(said), "%s^x01 : %s", prefix, said);
    
		static i, team[11];
		for (i = 1; i <= MAXPLAYERS; ++i)
		{
			if (!flag_get(kBits[CONNECTED],i)) continue;

			if (get_user_team(i) == playerTeam)
			{
				if (flag_get(kBits[ALIVE],index) && flag_get(kBits[ALIVE],i) || !flag_get(kBits[ALIVE],index) && !flag_get(kBits[ALIVE],i))
				{
					get_user_team(i, team, charsmax(team));
					changeTeamInfo(i, color);
					writeMessage(i, said);
					changeTeamInfo(i, team);
				}
			}
		}	
	}
    
	return PLUGIN_HANDLED_MAIN;
}*/

public ham_PlayerKilledPost( victim, attacker, shouldgib )
{
	if( !is_user_connected( attacker ) || victim == attacker || !attacker )
		return;
		
	if(get_user_weapon( attacker ) == CSW_KNIFE)
	{
		++kDataRank[ attacker ][ KNIFE_KILLS ];
		++kDataRank[ victim ][ KNIFE_DEATHS ];
	}
	
	++kDataRank[ attacker ][ KILLS ];
	++kDataRank[ victim ][ DEATHS ];
	
	flag_unset(kBits[ALIVE],victim);
	
	UpdateRange( attacker );
}

public ham_PlayerSpawnPost( index )
{
	flag_set(kBits[ALIVE],index);
	
	if( !flag_get(kBits[ALIVE], index)) return;
	
	++kDataRank[ index ][ SPAWNS ];
}

public ev_DeathMsg()
{
	static victim, attacker, headshot;
	
	attacker = read_data(1);
	victim = read_data(2);
	headshot = read_data(3);
	
	if( !attacker || victim == attacker )
	{
		++kDataRank[ victim ][ SUICIDES ];
		return;
	}
		
	if( headshot )
	{
		++kDataRank[ attacker ][ HS_KILLS ];
		++kDataRank[ victim ][ HS_DEATHS ];
	}
}

/*	================	*/

public cmd_CLAN( index )
{
	if( kClanMembership[ index ] == WITHOUT_CLAN )
	{
		ShowMenuCreateClan( index );
		return PLUGIN_HANDLED;
	}
	
	ShowMenuClan( index );
	return PLUGIN_HANDLED;
}

public JoinClanName( index )
{
	read_args(kClanName[ index ], CLANNAME_LENGHT-1);
	szRemove_Quotes(kClanName[ index ], kClanName[ index ]);
	trim(kClanName[ index ]);
	
	if( kClanNameConfirmated[ index ])
	{
		client_print( index, print_center, "YOU'VE CONFIRMED CLAN'S NAME!");
		ShowMenuCreateClan( index );
		return;
	}
	
	if( !kClanName[ index ][ 0 ])
	{
		client_print( index, print_chat, " TYPE THE CLAN'S NAME ");
		client_cmd( index, "messagemode ^"JOIN_CLAN_NAME^"");
		return;
	}
	
	static xd; xd = get_membersnum( index );
	
	if( xd )
	{
		client_print( index, print_center, "THIS CLAN NAME IS ALREADY TAKEN");
		kClanName[ index ] = "^0";
		ShowMenuCreateClan( index )
		return;
	}
	
	ShowMenuConfirmateClanName( index );
}

public JoinPassword( index )
{
	read_args(kPassword[ index ], PASSWORD_LENGHT-1);
	szRemove_Quotes(kPassword[ index ], kPassword[ index ]);
	trim(kPassword[ index ]);
	
	if( !kPassword[ index ][ 0 ] || containi( kPassword[ index ], " ") != -1 )
	{
		client_print( index, print_center, "YOUR PASSWORD, CONTAIN ERRORS" );
		client_cmd( index, "messagemode ^"JOIN_PASSWORD^"");
		return;
	}
	
	switch(kStatus[ index ])
	{
		case NOT_REGISTERED:
		{
			client_print( index, print_center, "CONFIRM YOUR PASSWORD TO CONTINUE");
			copy(kPassword2[ index ], PASSWORD_LENGHT-1, kPassword[ index ]);
			
			ShowMenuConfirmatePw( index );
		}
		case REGISTERED: 
		{
			new buffer[PASSWORD_LENGHT];
			adv_vault_get_prepare( vault, _, kPassword[ index ]);
			adv_vault_get_field( vault, kFields[ C_PASS ], buffer, charsmax(buffer));
			
			if(! equal(buffer, kPassword[ index ])) 
			{
				ShowLogMenu( index );
				client_print( index, print_center, "INCORRECT PASSWORD." );
				return;
			}
			
			client_print( index, print_center, "YOU'VE BEEN SUCCESSFULLY LOGGED TO YOUR ACCOUNT");
			ForceJoinTeam( index );
		}
		case LOGGUED: 
		{
			if(flag_get(kBits[CAN_CHANGE_PW], index)) 
			{
				client_print( index, print_center, "YOU HAVE ALREADY CHANGED YOUR PASSWORD ON THIS MAP");
				return;
			}
			
			client_print( index, print_center, "CONFIRM YOUR CURRENT PASSWORD TO CHANGE IT WITH A NEW ONE..." );
			copy(kPassword2[ index ], PASSWORD_LENGHT-1, kPassword[ index ]);
			ShowMenuConfirmatePw( index );
		}
	}
}

/*============================
	MENUS
============================*/

ShowMenuCreateClan( index )
{
	static menu, tittle[MENU_TITTLE_LENGHT], members; members = get_membersnum( index );
	formatex( tittle, MENU_TITTLE_LENGHT-1, "%s CREATE CLAN", MENU_PREFIX );
	menu = menu_create( tittle, "menu_create_hand" );
	
	formatex( tittle, MENU_TITTLE_LENGHT-1, "CLAN NAME: \d%s", kClanName[ index ] );
	menu_additem( menu, (!kClanName[ index ][ 0 ])?"TYPE THE CLAN NAME":tittle, "1" );
	
	formatex( tittle, MENU_TITTLE_LENGHT-1, "ADD MEMBERS... \d( \r%d \y/ \r%d \d)", members, CLAN_MAXMEMBERS);
	menu_additem( menu, (!kClanName[ index ][ 0 ])?"\dADD MEMBERS":tittle, "2" );
	
	menu_additem( menu, (members >= CLAN_MINMEMBERS )?"CREATE CLAN":"\dCREATE CLAN", "3" );
	
	menu_display( index, menu );
}

public menu_create_hand( index, menu, item )
{
	switch( item )
	{
		case MENU_EXIT: { menu_destroy( menu ); return PLUGIN_HANDLED; }
		
		case 0:
		{
			if(!kClanNameConfirmated[ index ] )
			{
				client_print( index, print_center, " TYPE THE CLAN NAME " );
				client_cmd( index, "messagemode ^"JOIN_CLAN_NAME^"" );
				
				return PLUGIN_HANDLED;
			}
			
			client_print( index, print_center, "YOU'VE CONFIRMED CLAN'S NAME" );
			ShowMenuCreateClan( index );
		}
		case 1: 
		{
			if(!kClanName[ index ][ 0 ])
			{
				client_print( index, print_center, "YOU NEED TO CREATE A CLAN'S NAME BEFORE");
				ShowMenuCreateClan( index );
				return PLUGIN_HANDLED;
			}
			
			ShowInviteMenu( index );
		}
		case 2: 
		{
			static members; members = get_membersnum( index );
			
			if(members >= CLAN_MINMEMBERS )
				CreateClan( index );
			else
				client_print( index, print_center, "YOU NEED AT LEAST %d MEMBERS TO CREATE THE CLAN", CLAN_MINMEMBERS );
		}
	}
	
	menu_destroy( menu );
	return PLUGIN_HANDLED;
}

ShowMenuClan( index )
{
	static menu, tittle[ MENU_TITTLE_LENGHT ], members; members = get_membersnum( index );
	formatex( tittle, MENU_TITTLE_LENGHT-1, "%s CLAN MENU: \r%s^n\wMEMBERS: \y%d \d/ \y%d", 
	MENU_PREFIX, kClanName[ index ], members, CLAN_MAXMEMBERS );
	menu = menu_create( tittle, "menu_clan" );
	
	
	switch(kClanMembership[ index ])
	{
		case CLAN_OWNER:
		{
			menu_additem( menu, "VIEW MEMBERS", "1" );
			menu_additem( menu, "KICK MEMBERS", "2" );
			menu_additem( menu, (members >= CLAN_MAXMEMBERS)?"\dINVITE MEMBERS":"INVITE MEMBERS", "3" );
			menu_additem( menu, "EDIT RANK \d( del clan )^n", "4" );
			
			formatex(tittle, MENU_TITTLE_LENGHT-1, "%s \wCLAN CHAT \y( \dPRIVATE CHAT \d^"\rTEAM SAY\d^"\y)", 
			kActivatedClanChat[ index ] ? "\rDISABLE":"\rENABLE");
			menu_additem( menu, tittle, "5");
		}
		case CLAN_BOSS:
		{
			menu_additem( menu, "VIEW MEMBERS", "1" );
			menu_additem( menu, "KICK MEMBERS", "2" );
			menu_additem( menu, (members >= CLAN_MAXMEMBERS)?"\dINVITE MEMBERS":"INVITE MEMBERS", "3" );
			
			formatex(tittle, MENU_TITTLE_LENGHT-1, "%s \wCLAN CHAT \y( \dPRIVATE CHAT \d^"\rTEAM SAY\d^"\y)", 
			kActivatedClanChat[ index ] ? "DISABLE":"ENABLE");
			menu_additem( menu, tittle, "4");
		}
		case CLAN_MEMBER:
		{
			menu_additem( menu, "VIEW MEMBERS^n", "1" );
			
			formatex(tittle, MENU_TITTLE_LENGHT-1, "%s \wCLAN CHAT \y( \dPRIVATE CHAT \d^"\rTEAM SAY\d^"\y)", 
			kActivatedClanChat[ index ] ? "DISABLE":"ENABLE");
			menu_additem( menu, tittle, "2");
		}
	}
	
	menu_display( index, menu );
}

public menu_clan( index, menu, item )
{
	if( item == MENU_EXIT )
	{
		menu_destroy( menu );
		return PLUGIN_HANDLED;
	}
	
	static members; members = get_membersnum( index );
	switch(kClanMembership[ index ])
	{
		case CLAN_OWNER:
		{
			switch( item )
			{
				case 0: ShowClanMembers( index );
				case 1: ShowKickMembersMenu( index );
				case 2: 
				{
					if(members < CLAN_MAXMEMBERS)
					{
						ShowInviteMenu( index );
						return PLUGIN_HANDLED;
					}
					
					Color_Print( index, "MAX NUMBER OF MEMBERS WAS REACHED");
				}
						
				case 3: EditRangesMembers( index );
				case 4: 
				{
					if(kActivatedClanChat[ index ])
					{
						kActivatedClanChat[ index ] = false;
						ShowMenuClan( index );
						return PLUGIN_HANDLED;
					}
					
					kActivatedClanChat[ index ] = true;
					ShowMenuClan( index );
				}
			}
		}
		case CLAN_BOSS:
		{
			switch( item )
			{
				case 0: ShowClanMembers( index );
				case 1: ShowKickMembersMenu( index );
				case 2: 
				{
					if(members < CLAN_MAXMEMBERS)
					{
						ShowInviteMenu( index );
						return PLUGIN_HANDLED;
					}
					
					Color_Print( index, "MAX NUMBER OF MEMBERS WAS REACHED");
				}
				case 3: 
				{
					if(kActivatedClanChat[ index ])
					{
						kActivatedClanChat[ index ] = false;
						ShowMenuClan( index );
						return PLUGIN_HANDLED;
					}
					
					kActivatedClanChat[ index ] = true;
					ShowMenuClan( index );
				}
			}
		}
		case CLAN_MEMBER:
		{
			switch( item )
			{
				case 0: ShowClanMembers( index );
				case 1: 
				{
					if(kActivatedClanChat[ index ])
					{
						kActivatedClanChat[ index ] = false;
						ShowMenuClan( index );
						return PLUGIN_HANDLED;
					}
					
					kActivatedClanChat[ index ] = true;
					ShowMenuClan( index );
				}
			}
		}
	}
	
	menu_destroy( menu );
	return PLUGIN_HANDLED;
}

ShowInviteMenu( index )
{
	static n, menu, pos[3], tittle[MENU_TITTLE_LENGHT];
	formatex( tittle, MENU_TITTLE_LENGHT-1, "%s SEND INVITE TO AFFILIATE NEW MEMBERS", MENU_PREFIX );
	menu = menu_create( tittle, "menu_invite_hand" );
	
	for( n = 1; n <= MAXPLAYERS; ++n )
	{
		if( !flag_get(kBits[CONNECTED], n) ) continue;
		
		if( kClanMembership[ n ] != WITHOUT_CLAN ) continue;
		
		if( index == n ) continue;
		
		num_to_str( n, pos, 2 );
		
		menu_additem( menu, kPlayerName[ n ], pos );
	}
	
	menu_display( index, menu );
}

public menu_invite_hand( index, menu, item )
{
	if( item == MENU_EXIT ) 
	{
		menu_destroy( menu );
		return PLUGIN_HANDLED;
	}
    
	static iKey[ 6 ], iAccess, iCallback;
    
	menu_item_getinfo( menu, item, iAccess, iKey, charsmax( iKey ), _, _, iCallback );
	kInvited[ index ] = str_to_num( iKey );
	
	if( get_membersnum( index ) == CLAN_MAXMEMBERS )
	{
		client_print( index, print_chat, "[CLAN-SYSTEM] YOU HAVE REACHED THE MAX NUMBER OF MEMBERS");
		menu_destroy( menu );
		return PLUGIN_HANDLED;
	}
	
	client_print( index, print_chat, "[CLAN-SYSTEM] YOU'VE INVITED %s TO JOIN YOUR CLAN.", kPlayerName[ kInvited[index] ] );
	client_print( kInvited[ index ], print_chat, "[CLAN-SYSTEM] %s INVITED YOU TO JOIN HIS CLAN: %s", kPlayerName[ index ], kClanName[ index ] );
	
	kClanOwner[ kInvited[ index ] ] = index;
	
	if(is_user_bot( kInvited[ index ] ) )
	{
		kClanMembership[ kInvited[ index ] ] = CLAN_MEMBER;
		copy(kClanName[ kInvited[index] ], CLANNAME_LENGHT-1, kClanName[ index ] );
		client_print( index, print_chat, "[CLAN-SYSTEM] %s HAS ACCEPTED YOUR INVITATION", kPlayerName[ kInvited[index] ] );
		
		DataManagement( kInvited[ index ], SAVE );
		cmd_CLAN( index );
	}
	else	
		ShowMenuInvited( kInvited[ index ] , index );
	
	menu_destroy( menu );
	return PLUGIN_HANDLED;
}

ShowMenuInvited( invited, owner )
{
	static menu, tittle[ MENU_TITTLE_LENGHT ];
	formatex( tittle, MENU_TITTLE_LENGHT-1, "%s \r%s \wHAS SENT YOU AN INVITATION TO JOIN THE CLAN: \y%s",
	MENU_PREFIX, kPlayerName[ owner ], kClanName[ owner ] );
	
	menu = menu_create(tittle, "menu_invited_hand");

	menu_additem( menu, "\yACCEPT", "1");
	
	menu_additem( menu, "\rDECLINE", "2");
	
	menu_setprop( menu, MPROP_EXIT, MEXIT_NEVER );
	
	menu_display( invited, menu );
}

public menu_invited_hand( index, menu, item )
{	
	switch (item)
	{
		case 0: 
		{
			kClanMembership[ index ] = CLAN_MEMBER;
			copy(kClanName[ index ], CLANNAME_LENGHT-1, kClanName[ kClanOwner[index] ]);
			client_print( kClanOwner[ index ], print_chat, "[CLAN-SYSTEM] %s HAS ACCEPTED YOUR REQUEST", kPlayerName[ index ]);
			
			cmd_CLAN( kClanOwner[ index ] );
		}
		case 1: 
		{
			client_print( kClanOwner[ index ], print_chat, "[CLAN-SYSTEM] %s HAS DECLINED YOUR INVITATION", kPlayerName[ index ]);
			
			cmd_CLAN( kClanOwner[ index ] );
			
			kClanMembership[ index ] = WITHOUT_CLAN;
			kClanOwner[ index ] = 0;
			kClanName[ index ] = "^0";
		}
 		
		case MENU_EXIT: { menu_destroy(menu); return PLUGIN_HANDLED; }
	}
	
	menu_destroy(menu);
	
	return PLUGIN_HANDLED;
}

ShowMenuConfirmateClanName( index )
{
	static menu, tittle[ MENU_TITTLE_LENGHT ];
	formatex( tittle, MENU_TITTLE_LENGHT-1, "%s CLAN NAME WILL BE: \d%s", MENU_PREFIX, kClanName[ index ] );
	menu = menu_create( tittle, "menu_confirm_hand" );
	
	menu_additem( menu, "YES, CONTINUE", "1" );
	menu_additem( menu, "NO, CREATE A NEW ONE", "2");
	
	menu_setprop( menu, MPROP_EXIT, MEXIT_NEVER );
	menu_display( index, menu );
}

public menu_confirm_hand( index, menu, item )
{
	switch( item )
	{
		case MENU_EXIT: { menu_destroy(menu); return PLUGIN_HANDLED; }
		
		case 0:
		{
			client_print( index, print_chat, "[CLAN-SYSTEM] CLAN NAME WAS SUCCESSFULLY CREATED." );
			kClanNameConfirmated[ index ] = true;
			DataManagement( index, SAVE );
			ShowMenuCreateClan( index );
		}
		case 1:
		{
			client_print( index, print_chat, " TYPE THE CLAN NAME ");
			client_cmd( index, "messagemode ^"JOIN_CLAN_NAME^"");
		}	
	}
	
	menu_destroy( menu );
	return PLUGIN_HANDLED;
}

ShowClanMembers( index )
{
	static menu, keyindex, szkeyindex[5], item[128], item2[50], tittle[ MENU_TITTLE_LENGHT ];
	formatex( tittle, MENU_TITTLE_LENGHT-1, "%s CLAN'S MEMBERS LIST: \d %s", MENU_PREFIX, kClanName[ index ]);
	menu = menu_create( tittle, "menu_members_hand");
	
	adv_vault_find_start( vault, kFields[ C_CLANNAME ], kClanName[ index ], FINDFLAGS_EQUAL);
    
	while((keyindex = adv_vault_find_next( vault ))) 
	{
		adv_vault_get_field( vault, kFields[ C_PNAME], item2, charsmax(item2) );
		num_to_str( keyindex, szkeyindex, charsmax(szkeyindex) );
		formatex( item, charsmax(item), "%s \d( \y %s \d)", item2, MemberRange[adv_vault_get_field(vault, kFields[C_MEMBERSHIP])] );
		menu_additem( menu, item, szkeyindex);
	}
	
	adv_vault_find_closed( vault );
	
	menu_display( index, menu );
}

public menu_members_hand( index, menu, item )
{
	if( item == MENU_EXIT)
	{
		cmd_CLAN( index );
		menu_destroy( menu );
		return PLUGIN_HANDLED;
	}
	
	static iKey, szitem[5], keyindex;
	menu_item_getinfo( menu, item, iKey, szitem, charsmax(szitem), _, _, iKey );
	keyindex = str_to_num(szitem);
	
	ShowMenuPlayerStats( index, keyindex );
	
	menu_destroy( menu );
	return PLUGIN_HANDLED;
}

ShowMenuPlayerStats( index, keyindex )
{
	new name[32], tittle[ MENU_TITTLE_LENGHT ], menu
	
	if(!adv_vault_get_prepare( vault,  keyindex )) 
		return;
        
	adv_vault_get_field( vault, kFields[ C_PNAME ],  name, 31 );
	formatex( tittle, MENU_TITTLE_LENGHT-1, "%s \wINFORMATION: \y%s \r",  MENU_PREFIX, name );
    
	menu = menu_create( tittle, "menu_playerstats_hand" );
	
	formatex( tittle, MENU_TITTLE_LENGHT-1, "\wCLAN RANK: \y%s", 
	MemberRange[ adv_vault_get_field( vault, kFields[ C_MEMBERSHIP]) ]);
	menu_additem( menu, tittle, "" );
	
	formatex( tittle, MENU_TITTLE_LENGHT-1, "\wGENERAL RANK: \y%s", 
	Rangos[ adv_vault_get_field(vault, kFields[C_RANGE ]) ][ RANGO_NAME ]);
	menu_additem( menu, tittle, "" );
	 
	formatex(tittle, MENU_TITTLE_LENGHT-1, "\wKILLS: \y%d", adv_vault_get_field( vault, kFields[ C_KILLS ]) );
	menu_additem( menu , tittle, "" );
	 
	formatex(tittle, MENU_TITTLE_LENGHT-1, "\wDEATHS: \y%d", adv_vault_get_field( vault, kFields[ C_DEATHS ]) );
	menu_additem( menu, tittle, "" );
	 
	formatex(tittle, MENU_TITTLE_LENGHT-1, "\wHEADSHOT KILLS: \y%d", adv_vault_get_field( vault, kFields[ C_HS_KILLS])  );
	menu_additem( menu, tittle, "");
	 
	formatex(tittle, MENU_TITTLE_LENGHT-1, "\wHEADSHOT DEATHS: \y%d", adv_vault_get_field( vault, kFields[ C_HS_DEATHS])  );
	menu_additem( menu, tittle, "");
	 
	formatex(tittle, MENU_TITTLE_LENGHT-1, "\wKNIFE KILLS: \y%d", adv_vault_get_field( vault, kFields[ C_KNIFE_KILLS ])  );
	menu_additem( menu, tittle, "");
	 
	formatex(tittle, MENU_TITTLE_LENGHT-1, "\wKNIFE DEATHS: \y%d", adv_vault_get_field( vault, kFields[ C_KNIFE_DEATHS])  );
	menu_additem( menu, tittle, "");
	 
	formatex(tittle, MENU_TITTLE_LENGHT-1, "\wSUICIDES: \y%d", adv_vault_get_field( vault, kFields[ C_SUICIDES ]) );
	menu_additem( menu, tittle, "");
	 
	formatex(tittle, MENU_TITTLE_LENGHT-1, "\wRESPAWNS: \y%d", adv_vault_get_field( vault, kFields[ C_SPAWNS ]) );
	menu_additem( menu, tittle, "");
	
	menu_display( index, menu );
}

public menu_playerstats_hand( index, menu, item )
{
	if( item == MENU_EXIT )
	{
		menu_destroy(  menu );
		return PLUGIN_HANDLED;
	}
	
	if(item <  6)
		menu_display( index, menu, 0);
	else
		menu_display( index, menu, 1);
	
	return PLUGIN_HANDLED;
}

ShowKickMembersMenu( index )
{
	static menu, keyindex, szkeyindex[5], item[128], tittle[ MENU_TITTLE_LENGHT ];
	formatex( tittle, MENU_TITTLE_LENGHT-1, "%s KICK MEMBERS OF THE CLAN: \d %s", MENU_PREFIX, kClanName[ index ]);
	menu = menu_create( tittle, "menu_kick_hand");
	
	adv_vault_find_start( vault, kFields[ C_CLANNAME ], kClanName[ index ], FINDFLAGS_EQUAL);
    
	while((keyindex = adv_vault_find_next( vault ))) 
	{
		adv_vault_get_field( vault, kFields[ C_PNAME ], item, charsmax(item) );
		num_to_str( keyindex, szkeyindex, charsmax(szkeyindex) );
		menu_additem( menu, item, szkeyindex);
	}
	
	adv_vault_find_closed( vault );
	
	menu_display( index, menu );
}

public menu_kick_hand( index, menu, item )
{
	if( item == MENU_EXIT)
	{
		cmd_CLAN( index );
		menu_destroy( menu );
		return PLUGIN_HANDLED;
	}
	
	static iKey, szitem[5], keyindex;
	menu_item_getinfo( menu, item, iKey, szitem, charsmax(szitem), _, _, iKey );
	keyindex = str_to_num(szitem);
	
	if(!adv_vault_get_prepare( vault,  keyindex )) 
		return PLUGIN_HANDLED;
		
	static level, name[32]; 
	adv_vault_get_field( vault, kFields[ C_PNAME ], name, 31);
	level = adv_vault_get_field( vault, kFields[ C_MEMBERSHIP]);
	
	if(equal(name, kPlayerName[ index ]) )
	{
		Color_Print( index, "YOU CAN'T KICK YOURSELF");
		ShowMenuClan( index );
		return PLUGIN_HANDLED;
	}
	
	if( level == CLAN_OWNER)
	{
		Color_Print( index, "YOU CAN'T KICK THE FOUNDER");
		ShowMenuClan( index );
		return PLUGIN_HANDLED;
	}
	
	adv_vault_set_start( vault )
	adv_vault_set_field( vault, kFields[ C_CLANNAME ], "^0");
	adv_vault_set_field( vault, kFields[ C_MEMBERSHIP ], WITHOUT_CLAN );
	adv_vault_set_field( vault, kFields[ C_CLAN_CHAT ], false);
	adv_vault_set_end( vault, _, name);
	
	Color_Print(index, "YOU'VE KICKED: %s", name );
	ShowMenuClan( index );
	
	menu_destroy( menu );
	return PLUGIN_HANDLED;
}

EditRangesMembers( index )
{
	static menu, keyindex, szkeyindex[5], item[128], item2[50], tittle[ MENU_TITTLE_LENGHT ];
	formatex( tittle, MENU_TITTLE_LENGHT-1, "%s CLAN'S RANK EDITOR: \d %s", MENU_PREFIX, kClanName[ index ]);
	menu = menu_create( tittle, "menu_ranges_hand");
	
	adv_vault_find_start( vault, kFields[ C_CLANNAME ], kClanName[ index ], FINDFLAGS_EQUAL);
    
	while((keyindex = adv_vault_find_next( vault ))) 
	{
		adv_vault_get_field( vault, kFields[ C_PNAME], item2, charsmax(item2) );
		num_to_str( keyindex, szkeyindex, charsmax(szkeyindex) );
		formatex( item, charsmax(item), "%s \d( \y %s \d)", item2, MemberRange[adv_vault_get_field(vault, kFields[C_MEMBERSHIP])] );
		menu_additem( menu, item, szkeyindex);
	}
	
	adv_vault_find_closed( vault );
	
	menu_display( index, menu );
}

public menu_ranges_hand( index, menu, item )
{
	if( item == MENU_EXIT)
	{
		cmd_CLAN( index );
		menu_destroy( menu );
		return PLUGIN_HANDLED;
	}
	
	static iKey, szitem[5], keyindex;
	menu_item_getinfo( menu, item, iKey, szitem, charsmax(szitem), _, _, iKey );
	keyindex = str_to_num(szitem);
	
	if(!adv_vault_get_prepare( vault,  keyindex )) 
		return PLUGIN_HANDLED;
		
	static level, name[32]; 
	adv_vault_get_field( vault, kFields[ C_PNAME ], name, 31);
	level = adv_vault_get_field( vault, kFields[ C_MEMBERSHIP]);
	
	if(equal(name, kPlayerName[ index ]) )
	{
		Color_Print( index, "YOU CAN'T CHANGE YOUR RANK");
		ShowMenuClan( index );
		return PLUGIN_HANDLED;
	}
	
	if( level == CLAN_OWNER)
	{
		Color_Print( index, "YOU CAN'T CHANGE FOUNDER'S RANK");
		ShowMenuClan( index );
		return PLUGIN_HANDLED;
	}
	
	adv_vault_set_start( vault )

	if( level == CLAN_MEMBER )
		adv_vault_set_field( vault, kFields[ C_MEMBERSHIP ], CLAN_BOSS );
	else if( level == CLAN_BOSS )
		adv_vault_set_field( vault, kFields[ C_MEMBERSHIP ], CLAN_MEMBER );
	
	adv_vault_set_end( vault, _, name);
	
	Color_Print(index, "YOU'VE CHANGED THE RANK OF: %s", name );
	ShowMenuClan( index );
	
	menu_destroy( menu );
	return PLUGIN_HANDLED;
}

/*	ACCOUNT SYSTEM		*/

ShowLogMenu( index) 
{
	static menu, tittle[MENU_TITTLE_LENGHT];
	formatex(tittle, MENU_TITTLE_LENGHT-1, "Account system by \dkikizon^n\wWelcome \r%s^n\wSTATS: \r%s^n\wYOUR LAST VISIT WAS: \r%s", 
	kPlayerName[ index ], Status[ kStatus[ index ] ], kDate[ index ] );
	
	menu = menu_create( tittle, "menu_log_hand" );
	
	menu_additem(menu, (kStatus[ index ] == REGISTERED ) ? "LOG IN":"\dLOG IN", "1" );
	menu_additem(menu, (kStatus[ index ] == NOT_REGISTERED ) ? "REGISTER^n":"\dREGISTER^n", "2" );
	menu_additem(menu, (kStatus[ index ] == LOGGUED && !flag_get(kBits[CAN_CHANGE_PW],index)) ? "CHANGE PASSWORD":"\dCHANGE PASSWORD", "3" );
	
	menu_setprop( menu, MPROP_EXIT, MEXIT_NEVER );
	
	menu_display( index, menu );
}

public menu_log_hand( index, menu, item )
{
	switch( item )
	{
		case 0: 
		{
			if(kStatus[ index ] == REGISTERED)
			{
				client_print( index, print_center, "CONFIRM THE PASSWORD TO JOIN YOUR ACCOUNT" );
				client_cmd( index,"messagemode ^"JOIN_PASSWORD^"" );
			} 
			else 
			{
				client_print( index, print_center, "YOU CAN'T USE THIS OPTION");
				ShowLogMenu( index );
				return PLUGIN_HANDLED;
			}
		}
		case 1: 
		{
			if(kStatus[ index ] == NOT_REGISTERED )
			{
				client_print( index, print_center, "TYPE A PASSWORD TO CREATE A NEW ACCOUNT" );
				client_cmd( index ,"messagemode ^"JOIN_PASSWORD^"" );
			} 
			else 
			{
				client_print( index, print_center, "YOU CAN'T USE THIS OPTION" );
				ShowLogMenu( index );
				return PLUGIN_HANDLED;
			}	
		}
		case 2: 
		{
			if(kStatus[ index ] == LOGGUED && !flag_get(kBits[CAN_CHANGE_PW],index))
			{
				client_print( index, print_center, "CONFIRM YOUR NEW PASSWORD" );
				client_cmd( index,"messagemode ^"JOIN_PASSWORD^"");
			} 
			else 
			{
				client_print( index, print_center, "YOU ARE NOT LOGGED OR YOU'VE CHANGED YOUR PASSWORD DURING THIS MAP" );
				ShowLogMenu( index );
				return PLUGIN_HANDLED;
			}
		}
		
		case MENU_EXIT: { menu_destroy( menu ); return PLUGIN_HANDLED; }
	}
	
	menu_destroy( menu );
	return PLUGIN_HANDLED;
}

ShowMenuConfirmatePw( index )
{
	static menu, Tit[ MENU_TITTLE_LENGHT ];
	formatex( Tit, MENU_TITTLE_LENGHT-1,"PASSWORD WILL BE \r%s^n^n\yCONFIRM?", kPassword2[ index ]);
	
	menu = menu_create( Tit, "menu_confirmpw_hand" );
	
	menu_additem( menu,"\rYES\w, CONFIRM","1" );
	menu_additem( menu,"\rNO\w, TYPE A NEW ONE","2" );
	
	menu_setprop( menu, MPROP_EXIT, MEXIT_NEVER );
	
	menu_display( index, menu );
}

public menu_confirmpw_hand( index, menu, item )
{
	switch(item) 
	{
		case 0: 
		{
			if( kStatus[ index ] == LOGGUED )
			{
				copy(kPassword[ index ], PASSWORD_LENGHT-1, kPassword2[ index ]);
				DataManagement( index, SAVE );
				client_print( index, print_center, "YOUR PASSWORD HAS BEEN CHANGED SUCCESSFULLY");
				flag_set(kBits[CAN_CHANGE_PW], index);
			}
			else 
			{
				copy(kPassword[ index ], PASSWORD_LENGHT-1, kPassword2[ index ]);
				client_print( index, print_center, "YOUR NEW ACCOUNT HAS BEEN CREATED" );
				DataManagement( index, SAVE );
				ForceJoinTeam( index );
			}
		}
		case 1: 
		{
			menu_destroy(menu);
			
			client_cmd( index, "messagemode ^"JOIN_PASSWORD^"" );
			
			if( kStatus[ index ] == LOGGUED )
				client_print( index, print_center, "TYPE YOUR NEW PASSWORD" );
			else
				client_print( index, print_center, "TYPE THE PASSWORD OF YOUR NEWEST ACCOUNT" );
		}
		
		case MENU_EXIT: { menu_destroy( menu ); return PLUGIN_HANDLED; }
	}
	
	menu_destroy( menu );
	return PLUGIN_HANDLED;
}

/*============================
	STOCKS
============================*/

stock szRemove_Quotes( const szStr[ ], szOut[ ] )
{
	if ( !szStr[ 1 ]  )
	{
		szOut[ 0 ] = EOS;
		return 0;
	}
	
	copy( szOut, strlen( szStr )-2, szStr[ 1 ] );
	trim( szOut );
	
	static iLen, i;
	iLen = strlen( szOut );
	
	for ( i = 0; i < iLen; ++i)
	{
		if (szOut[ i ] == '"')
			return 0;
	}
	
	return iLen;
}

/*stock ValidMessage(text[], maxcount) 
{
	static len, i, count;
	len = strlen(text);
	count = 0;
    
	if (!len) return false;
    
	for (i = 0; i < len; ++i) 
	{
		if (text[i] != ' ') 
		{
			++count;
			
			if (count >= maxcount)
				return true;
		}
	}
    
	return false;
}
public changeTeamInfo(player, team[])
{
	message_begin(MSG_ONE, kMsg[MSG_TEAMINFO], _, player);
	write_byte(player);
	write_string(team);
	message_end();
}
public writeMessage(player, message[])
{
	message_begin(MSG_ONE, kMsg[MSG_SAYTEXT], {0, 0, 0}, player);
	write_byte(player);
	write_string(message);
	message_end();
}*/

stock Color_Print(const id, const input[], any:...)
{	
	new count = 1, players[32];
	static msg[191], len;
	
	len = formatex(msg, charsmax(msg), "%s ", CHAT_PREFIX);
	vformat(msg[len], 190 - len, input, 3);
	
	replace_all(msg, 190, "!g", "^4");
	replace_all(msg, 190, "!n", "^1");
	replace_all(msg, 190, "!t", "^3");
	
	
	if(id) 
		players[0] = id;
	else 
		get_players(players, count, "ch");
         	
	for (new i = 0; i < count; ++i)
	{
		if(flag_get(kBits[CONNECTED], players[i]))
		{
			message_begin(MSG_ONE_UNRELIABLE, kMsg[MSG_SAYTEXT], _, players[i]);  
			write_byte(players[i]);
			write_string(msg);
			message_end();				
		}		
	}

}

public message_VGUImenu( msgid, dest, index ) 
{
	if( kStatus[ index ] != LOGGUED )
		ShowLogMenu( index );

	return 1;
}

public DataManagement( index, type )
{
	if( !flag_get(kBits[CONNECTED],index) ) return;
	
	if(type == LOAD)
	{
		if( !adv_vault_get_prepare( vault, _, kPlayerName[ index ] ) ) 
		{
			kStatus[ index ] = NOT_REGISTERED;
			return;
		} 
		else 
		{
			kStatus[ index ] = REGISTERED;
			
			kClanMembership[ index ] = adv_vault_get_field( vault, kFields[ C_MEMBERSHIP ] );
			adv_vault_get_field( vault, kFields[ C_CLANNAME ], kClanName[ index ], CLANNAME_LENGHT );
			adv_vault_get_field( vault, kFields[ C_DATE ], kDate[ index ], 31);
			adv_vault_get_field( vault, kFields[ C_PASS ], kPassword[ index ], PASSWORD_LENGHT-1);
			adv_vault_get_field( vault, kFields[ C_PNAME ], kPname[ index ], 31 );
			kDataRank[ index ][ KILLS ] = adv_vault_get_field( vault, kFields[ C_KILLS ] );
			kDataRank[ index ][ DEATHS ] = adv_vault_get_field( vault, kFields[ C_DEATHS ] );
			kDataRank[ index ][ HS_KILLS ] = adv_vault_get_field( vault, kFields[ C_HS_KILLS ] );
			kDataRank[ index ][ HS_DEATHS ] = adv_vault_get_field( vault, kFields[C_HS_DEATHS ] );
			kDataRank[ index ][ KNIFE_KILLS ] = adv_vault_get_field( vault, kFields[C_KNIFE_KILLS ] );
			kDataRank[ index ][ KNIFE_DEATHS ] = adv_vault_get_field( vault, kFields[C_KNIFE_DEATHS ] );
			kDataRank[ index ][ SUICIDES ] = adv_vault_get_field( vault, kFields[C_SUICIDES ] );
			kDataRank[ index ][ SPAWNS ] = adv_vault_get_field( vault, kFields[C_SPAWNS ] );
			kActivatedClanChat[ index ] = adv_vault_get_field( vault, kFields[ C_CLAN_CHAT ] );
		}
	}
	else
	{
		copy(kPname[ index ], 31, kPlayerName[ index ]);
		adv_vault_set_start( vault );
		
		adv_vault_set_field( vault, kFields[ C_MEMBERSHIP ], kClanMembership[ index ] );
		adv_vault_set_field( vault, kFields[ C_CLANNAME ], kClanName[ index ] );
		adv_vault_set_field( vault, kFields[ C_DATE ], kDate[ index ]);
		adv_vault_set_field( vault, kFields[ C_PASS ], kPassword[ index ]);
		adv_vault_set_field( vault, kFields[ C_PNAME ], kPname[ index ]);
		adv_vault_set_field( vault, kFields[ C_KILLS ], kDataRank[ index ][ KILLS ]);
		adv_vault_set_field( vault, kFields[ C_DEATHS ], kDataRank[ index ][DEATHS]);
		adv_vault_set_field( vault, kFields[ C_HS_KILLS ], kDataRank[ index ][ HS_KILLS ]);
		adv_vault_set_field( vault, kFields[ C_HS_DEATHS ], kDataRank[ index ][ HS_DEATHS ]);
		adv_vault_set_field( vault, kFields[ C_KNIFE_KILLS ], kDataRank[ index ][ KNIFE_KILLS ]);
		adv_vault_set_field( vault, kFields[ C_KNIFE_DEATHS], kDataRank[ index ][ KNIFE_DEATHS ]);
		adv_vault_set_field( vault, kFields[ C_SUICIDES], kDataRank[ index ][ SUICIDES ]);
		adv_vault_set_field( vault, kFields[ C_SPAWNS ], kDataRank[ index ][ SPAWNS ]);
		adv_vault_set_field( vault, kFields[ C_CLAN_CHAT ], kActivatedClanChat[ index ] );
		
		adv_vault_set_end( vault, 0, kPlayerName[ index ] );
	}
}

public fm_ClientInfoChanged( index, buffer )
{
	if( flag_get(kBits[CONNECTED],index) ) 
	{
		if(kStatus[ index ] == LOGGUED)
		{
			static OldName[33];
			
			engfunc(EngFunc_InfoKeyValue, buffer, "name", OldName, sizeof OldName - 1);
			
			if(equal(OldName, kPlayerName[ index ])) 
				return FMRES_IGNORED;
			
			set_user_info( index, "name", kPlayerName[ index ]);
			client_cmd( index, "setinfo ^"name^" ^"%s^"", kPlayerName[ index ]);
		}
	}
	
	return FMRES_IGNORED;	
}

public ForceJoinTeam( index )
{
	static teammsg_block, teammsg_block_vgui, restore, vgui;
	
	restore = get_pdata_int( index, 510 );
	vgui = restore & (1<<0);
	
	if ( vgui ) set_pdata_int( index, 510, restore & ~(1<<0) );
	
	teammsg_block = get_msg_block( kMsg[MSG_SHOWMENU] );
	teammsg_block_vgui = get_msg_block( kMsg[MSG_VGUI] );
	
	set_msg_block( kMsg[MSG_SHOWMENU], BLOCK_ONCE );
	set_msg_block( kMsg[MSG_VGUI], BLOCK_ONCE );
	
	engclient_cmd( index, "jointeam", "5" );
	engclient_cmd( index, "joinclass", "5" );
	
	set_msg_block( kMsg[MSG_SHOWMENU], teammsg_block);
	set_msg_block( kMsg[MSG_VGUI], teammsg_block_vgui);
	
	if (vgui) set_pdata_int( index, 510, restore );
		
	kStatus[ index ] = LOGGUED;
	
	set_task( 1.0, "ShowHUD", index + TASK_HUD, _, _, "b" );
}

public ShowHUD( taskid )
{
	static index; index =  ID_HUD;
	
	if ( !is_user_alive(index) )
	{
		index = pev( index, pev_iuser2 );
		
		if ( !flag_get(kBits[ALIVE],index))  return;
	}
	
	
	if( index != ID_HUD)
	{
		set_hudmessage(255, 200, 220, 0.60, 0.50, 0, 6.0, 1.1, 0.0, 0.0, -1);
		ShowSyncHudMsg(index, hudSync, "%s^nCLAN: %s || RANK: %s", 
		kPlayerName[ index ], kClanName[index][0]?kClanName[index]:"Sin Clan", Rangos[kRange[index]][RANGO_NAME] );
	}
	else
	{
		set_hudmessage(0, 255, 0, 0.0, 0.0, 0, 6.0, 1.1, 0.0, 0.0, -1);
		ShowSyncHudMsg(index, hudSync, "RANK: %s^nCLAN: %s^nFRAGS: %d / %d", 
		Rangos[ kRange[index] ][ RANGO_NAME ], kClanName[ index ][0]?kClanName[ index ]:"NO CLAN", kDataRank[ index ][ KILLS ], Rangos[ kRange[index] ][ RANGO_FRAGS ] );
	}
}

UpdateRange( index )
{
	static range; range = kRange[ index ];
	
	while( kDataRank[ index ][ KILLS ] >=Rangos[ kRange[index] ][ RANGO_FRAGS ])
		++kRange[ index ];
		
	if(kRange[ index ] > range )
		Color_Print( index, "CONGRATS, YOU'VE PASSED TO: !g%s", Rangos[ kRange[index] ][RANGO_NAME]);
}

public get_membersnum( index )
{
	if( !kClanName[ index ][ 0 ]) return 0;
	
	static num, keyindex, keyname[32]; num = 0;

	adv_vault_find_start( vault, kFields[ C_CLANNAME ], kClanName[ index ], FINDFLAGS_EQUAL );
	
	while((keyindex = adv_vault_find_next( vault )))
	{
		adv_vault_get_keyname( vault, keyindex, keyname, 31 );
		++num;
	}
	
	adv_vault_find_closed( vault );
	
	if(!num) return 0;
	
	return num;
}

CreateClan( index )
{
	if(!flag_get(kBits[CONNECTED],index) ) return;
	
	kClanMembership[ index ] = CLAN_OWNER;
	
	DataManagement( index, SAVE );
	 
	cmd_CLAN( index );
}
Pentru ajutor, faceți cerere bine detaliată, completând și respectând modelul corespunzător.
Nu-mi mai dați cereri doar pentru a mă avea în lista de prieteni.
Dacă te ajut, și mă ignori/etc > te adaug în „foe”.
Aveți grijă la cei ce încearcă să mă copieze sau să dea drept mine..Puteți lua legătura cu mine prin STEAM dacă aveți o problemă/nelămurire în acest caz! Cont de forum am doar aici.
În cazul în care utilizați ceva din ce am postat(ex: aici), e bine să fiți la curent cu modificările aduse și de aici, iar dacă sunt ceva probleme nu ezitați să luați legătura cu mine. Actualizarea unor coduri nu se vor afișa public, doar dacă se găsește ceva critic/urgent de remediat, unele fiind coduri vechi iar unele refăcute chiar recent dar private.
* Nume pe cs1.6: eVoLuTiOn \ Nume vechi: eVo
* Atelierul meu - post2819572.html#p2819572 (închis, click link ca să vedeți de ce)
User avatar
limbaa
Membru, skill 0
Membru, skill 0
Posts: 33
Joined: 26 Oct 2015, 11:25
Detinator Steam: Da
Detinator server CS: GOX.BLACKGAMES.RO
SteamID: tenlimba96
Fond eXtream: 0
Discord: GaBy#1976
Has thanked: 4 times
Contact:

26 Sep 2020, 09:32

Code: Select all

unknownunknown unknown clan_system.amx bad load
Mi-l da cu bad load acuma :(
User avatar
levin
Scripter eXtreamCS
Scripter eXtreamCS
Posts: 3844
Joined: 24 Aug 2011, 12:24
Detinator Steam: Da
CS Status:
Detinator server CS: ☯∴
SteamID: riseofevo
Reputatie: Scripter eXtreamCS
Nume anterior: Adryyy
Location: ҳ̸Ҳ̸ҳ
Discord: devilclass
Has thanked: 36 times
Been thanked: 594 times
Contact:

27 Sep 2020, 00:35

la mine merge
Pentru ajutor, faceți cerere bine detaliată, completând și respectând modelul corespunzător.
Nu-mi mai dați cereri doar pentru a mă avea în lista de prieteni.
Dacă te ajut, și mă ignori/etc > te adaug în „foe”.
Aveți grijă la cei ce încearcă să mă copieze sau să dea drept mine..Puteți lua legătura cu mine prin STEAM dacă aveți o problemă/nelămurire în acest caz! Cont de forum am doar aici.
În cazul în care utilizați ceva din ce am postat(ex: aici), e bine să fiți la curent cu modificările aduse și de aici, iar dacă sunt ceva probleme nu ezitați să luați legătura cu mine. Actualizarea unor coduri nu se vor afișa public, doar dacă se găsește ceva critic/urgent de remediat, unele fiind coduri vechi iar unele refăcute chiar recent dar private.
* Nume pe cs1.6: eVoLuTiOn \ Nume vechi: eVo
* Atelierul meu - post2819572.html#p2819572 (închis, click link ca să vedeți de ce)
Post Reply

Return to “Cereri”

  • Information