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 );
}