0
Awards
LV
0
 
46
Likes
193

Messages

tweky

BOSS DE BOSS
Staff member
Administrator
Moderator LCS
High Rollers
Joined
Jun 7, 2024
Reaction score
46
Points
28
Age
31
Website
minios.ro
Credits
3,144
Descriere: Pluginul transformă experiența de joc dintr-una individuală în una de echipă. Permite administratorilor să creeze clanuri oficiale, iar jucătorilor să colaboreze pentru a strânge Clan XP. Sistemul include o ierarhie de 6 rank-uri complet personalizabile, chat privat și un clasament dinamic (Top 10) bazat pe performanță.
> clanurile pot fi create doar de admini cu accesele: abcdefghijklmnopqrstuv
> nu poti fi lider la 2 clanuri


Pluginul este creat de mine cu ajutorul Gemini GPT, nu stiu atat de bine sa scriptez.

Cum se face XP in clan?

Kill normal, +1 Clan XP
Headshot, +3 Clan XP
Kill cu Cuțitul, +5 Clan XP
Plantare Bombă, +3 Clan XP
Dezamorsare Bombă, +3 Clan XP

Descarcare:
Code:
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <nvault>

#define PLUGIN "Clan System+"
#define VERSION "0.5"
#define AUTHOR "mihay111/Gemini GPT"

#define ADMIN_ACCESS_FLAG (ADMIN_ALL|ADMIN_IMMUNITY|ADMIN_RESERVATION|ADMIN_KICK|ADMIN_BAN|ADMIN_SLAY|ADMIN_MAP|ADMIN_CVAR|ADMIN_CFG|ADMIN_CHAT|ADMIN_VOTE|ADMIN_PASSWORD|ADMIN_RCON|ADMIN_LEVEL_A|ADMIN_LEVEL_B|ADMIN_LEVEL_C|ADMIN_LEVEL_D|ADMIN_LEVEL_E|ADMIN_LEVEL_F|ADMIN_LEVEL_G|ADMIN_LEVEL_H|ADMIN_MENU)

new g_vault_clans, g_vault_ranks, g_vault_xp;
new g_szPlayerClan[33][32], g_iPlayerRank[33], g_iMemberXP[33];
new g_szRankNames[33][7][32], g_szAuthID[33][35];

new g_iTargetOwner[33], g_szTempClanName[33][32], g_iInviteSource[33], g_iEditingRank[33], g_iManagingMember[33];

public plugin_init() {
    register_plugin(PLUGIN, VERSION, AUTHOR);

    register_clcmd("say /createclan", "Cmd_CreateClan", ADMIN_ACCESS_FLAG);
    register_clcmd("say /clandelete", "Cmd_DeleteClan", ADMIN_ACCESS_FLAG);
    register_concmd("amx_deleteclanxp", "Cmd_ResetClanXP", ADMIN_ACCESS_FLAG);
    register_concmd("amx_deleteallclanxp", "Cmd_ResetAllXP", ADMIN_ACCESS_FLAG);

    register_clcmd("say /clan", "Cmd_ClanMenu");
    register_clcmd("say /invite", "Cmd_Invite");
    register_clcmd("say /myclanxp", "Cmd_MyXP");
    register_clcmd("say /clanhelp", "Cmd_ClanHelp");
    register_clcmd("say /clantop", "Cmd_ClanTop");
    register_clcmd("say", "Handle_SayCommands");

    register_event("DeathMsg", "Event_DeathMsg", "a");
    register_logevent("Event_BombPlanted", 3, "2=Planted_The_Bomb");
    register_logevent("Event_BombDefused", 3, "2=Defused_The_Bomb");

    register_clcmd("SET_CLAN_NAME", "Handle_SetClanName");
    register_clcmd("SET_RANK_NAME", "Handle_SetRankName");

    g_vault_clans = nvault_open("clans_v10");
    g_vault_ranks = nvault_open("clan_ranks_v10");
    g_vault_xp = nvault_open("clan_xp_v10");
}

public plugin_end() {
    nvault_close(g_vault_clans); nvault_close(g_vault_ranks); nvault_close(g_vault_xp);
}

public client_putinserver(id) {
    get_user_authid(id, g_szAuthID[id], 34);
    g_szPlayerClan[id][0] = 0; g_iPlayerRank[id] = 0; g_iMemberXP[id] = 0;
    for(new i=1; i<=6; i++) formatex(g_szRankNames[id][i], 31, "Rank %d", i);
    LoadClanData(id);
}

// --- LOGICA XP SI EVENIMENTE ---
public AddClanXP(id, iAmount) {
    if(!is_user_connected(id) || !g_szPlayerClan[id][0]) return;
    g_iMemberXP[id] += iAmount; SaveClanData(id);
    new szK[64]; copy(szK, 63, g_szPlayerClan[id]);
    new iT = nvault_get(g_vault_xp, szK);
    static szT[16]; num_to_str(iT + iAmount, szT, 15); nvault_set(g_vault_xp, szK, szT);
}

public Event_DeathMsg() {
    new killer = read_data(1);
    new victim = read_data(2);
    new headshot = read_data(3);
    static szWeapon[24]; read_data(4, szWeapon, 23);

    if(!killer || killer == victim || !is_user_connected(killer)) return;

    if(containi(szWeapon, "knife") != -1) AddClanXP(killer, 5);
    else if(headshot) AddClanXP(killer, 3);
    else AddClanXP(killer, 1);
}

public Event_BombPlanted() {
    new loguser[80], name[32]; read_logargv(0, loguser, 79); parse_loguser(loguser, name, 31);
    new id = get_user_index(name); if(is_user_connected(id)) AddClanXP(id, 3);
}

public Event_BombDefused() {
    new loguser[80], name[32]; read_logargv(0, loguser, 79); parse_loguser(loguser, name, 31);
    new id = get_user_index(name); if(is_user_connected(id)) AddClanXP(id, 3);
}

// --- CHAT SI COMENZI ---
public Handle_SayCommands(id) {
    static szArgs[192]; read_args(szArgs, 191); remove_quotes(szArgs);
    if(containi(szArgs, "/c ") == 0) {
        if(!g_szPlayerClan[id][0]) return PLUGIN_HANDLED;
        static szChatMsg[192], szName[32]; get_user_name(id, szName, 31);
        formatex(szChatMsg, 191, "^1[^3%s^1] ^4%s ^1: %s", g_szRankNames[id][g_iPlayerRank[id]], szName, szArgs[3]);
        new players[32], num, target; get_players(players, num);
        for(new i=0; i<num; i++) {
            target = players[i];
            if(is_user_connected(target) && equal(g_szPlayerClan[id], g_szPlayerClan[target]))
                ChatColor(target, szChatMsg);
        }
        return PLUGIN_HANDLED;
    }
    return PLUGIN_CONTINUE;
}

// --- CREATE CLAN ---
public Cmd_CreateClan(id) {
    if(!(get_user_flags(id) & ADMIN_ACCESS_FLAG)) return PLUGIN_HANDLED;
    new menu = menu_create("\r[WTFCS]\w Create Clan", "AdminCreate_Handler");
    static sz1[64], sz2[64], szN[32];
    if(g_iTargetOwner[id] && is_user_connected(g_iTargetOwner[id])) get_user_name(g_iTargetOwner[id], szN, 31); else copy(szN, 31, "Neselectat");
    formatex(sz1, 63, "Owner: \y%s", szN);
    formatex(sz2, 63, "Nume: \y%s", g_szTempClanName[id][0] ? g_szTempClanName[id] : "Nesetat");
    menu_additem(menu, sz1, "1"); menu_additem(menu, sz2, "2");
    menu_additem(menu, "\r[FINALIZEAZA]", "3");
    menu_display(id, menu, 0);
    return PLUGIN_HANDLED;
}

public AdminCreate_Handler(id, menu, item) {
    if(item == MENU_EXIT) { menu_destroy(menu); return PLUGIN_HANDLED; }
    switch(item) {
        case 0: {
            new pMenu = menu_create("Alege Owner", "OwnerSelect_Handler");
            new players[32], num, szN[32], szID[3]; get_players(players, num);
            for(new i=0; i<num; i++) {
                if(g_szPlayerClan[players[i]][0]) continue;
                get_user_name(players[i], szN, 31); num_to_str(players[i], szID, 2);
                menu_additem(pMenu, szN, szID);
            }
            menu_display(id, pMenu, 0);
        }
        case 1: client_cmd(id, "messagemode SET_CLAN_NAME");
        case 2: {
            new target = g_iTargetOwner[id];
            if(!is_user_connected(target)) { ChatColor(id, "^4[ERR]^1 Jucator offline."); return PLUGIN_HANDLED; }
            if(g_szPlayerClan[target][0]) { ChatColor(id, "^4[ERR]^1 Are deja clan."); return PLUGIN_HANDLED; }
            if(!g_szTempClanName[id][0]) { ChatColor(id, "^4[ERR]^1 Seteaza numele!"); return PLUGIN_HANDLED; }
            
            copy(g_szPlayerClan[target], 31, g_szTempClanName[id]);
            g_iPlayerRank[target] = 6; SaveClanData(target);
            ChatColor(0, "^4[CLAN]^1 Clan creat: ^3%s^1. Lider: ^4%n", g_szTempClanName[id], target);
        }
    }
    menu_destroy(menu); return PLUGIN_HANDLED;
}

public OwnerSelect_Handler(id, menu, item) {
    if(item != MENU_EXIT) {
        new szD[3], _a, _c; menu_item_getinfo(menu, item, _a, szD, 2, _, _, _c);
        g_iTargetOwner[id] = str_to_num(szD); Cmd_CreateClan(id);
    }
    menu_destroy(menu); return PLUGIN_HANDLED;
}

// --- MENIU CLAN ---
public Cmd_ClanMenu(id) {
    if(!g_szPlayerClan[id][0]) { ChatColor(id, "^4[CLAN]^1 Nu ai clan."); return PLUGIN_HANDLED; }
    new iTotalXP = nvault_get(g_vault_xp, g_szPlayerClan[id]);
    static szTitle[128]; formatex(szTitle, 127, "\r[CLAN]\w %s^n\dXP Total: \y%d", g_szPlayerClan[id], iTotalXP);
    new menu = menu_create(szTitle, "PlayerMenu_Handler");
    menu_additem(menu, "Membri", "1");
    if(g_iPlayerRank[id] == 6) {
        menu_additem(menu, "Rankuri", "2");
        menu_additem(menu, "Invita", "3");
    } else menu_additem(menu, "Paraseste", "4");
    menu_display(id, menu, 0); return PLUGIN_HANDLED;
}

public PlayerMenu_Handler(id, menu, item) {
    if(item == MENU_EXIT) { menu_destroy(menu); return PLUGIN_HANDLED; }
    switch(item) {
        case 0: ShowMembersMenu(id);
        case 1: if(g_iPlayerRank[id] == 6) ShowRankEditMenu(id);
        case 2: if(g_iPlayerRank[id] == 6) Cmd_Invite(id);
    }
    menu_destroy(menu); return PLUGIN_HANDLED;
}

public ShowMembersMenu(id) {
    new menu = menu_create("Membri Clan", "MemberMgmt_Handler");
    new players[32], num, szN[32], szID[3], szT[128]; get_players(players, num);
    for(new i=0; i<num; i++) {
        if(!equal(g_szPlayerClan[id], g_szPlayerClan[players[i]])) continue;
        get_user_name(players[i], szN, 31); num_to_str(players[i], szID, 2);
        formatex(szT, 127, "%s \d[%s] \r[%d XP]", szN, g_szRankNames[id][g_iPlayerRank[players[i]]], g_iMemberXP[players[i]]);
        menu_additem(menu, szT, szID);
    }
    menu_display(id, menu, 0);
}

public MemberMgmt_Handler(id, menu, item) {
    if(item != MENU_EXIT && g_iPlayerRank[id] == 6) {
        new szD[3], _a, _c; menu_item_getinfo(menu, item, _a, szD, 2, _, _, _c);
        new target = str_to_num(szD);
        if(id == target) { ChatColor(id, "^4[CLAN]^1 Nu te poti edita pe tine."); return PLUGIN_HANDLED; }
        g_iManagingMember[id] = target;
        new pMenu = menu_create("Membru", "MemberOptions_Handler");
        menu_additem(pMenu, "Rank", "1"); menu_additem(pMenu, "Kick", "2"); menu_display(id, pMenu, 0);
    }
    menu_destroy(menu); return PLUGIN_HANDLED;
}

public MemberOptions_Handler(id, menu, item) {
    if(item == 0) {
        new rMenu = menu_create("Alege Rank", "RankChange_Handler");
        for(new i=1; i<=6; i++) {
            new szI[2]; num_to_str(i, szI, 1);
            menu_additem(rMenu, g_szRankNames[id][i], szI);
        }
        menu_display(id, rMenu, 0);
    } else if(item == 1) {
        new t = g_iManagingMember[id]; g_szPlayerClan[t][0] = 0; SaveClanData(t); ChatColor(t, "^4[CLAN]^1 Ai fost eliminat.");
    }
    menu_destroy(menu); return PLUGIN_HANDLED;
}

public RankChange_Handler(id, menu, item) {
    if(item != MENU_EXIT) {
        new szD[2], _a, _c; menu_item_getinfo(menu, item, _a, szD, 1, _, _, _c);
        g_iPlayerRank[g_iManagingMember[id]] = str_to_num(szD);
        SaveClanData(g_iManagingMember[id]); ChatColor(id, "^4[CLAN]^1 Rank actualizat.");
    }
    menu_destroy(menu); return PLUGIN_HANDLED;
}

// --- INVITE SI RANK EDIT ---
public Cmd_Invite(id) {
    new menu = menu_create("Invita", "Invite_Handler");
    new players[32], num, szN[32], szID[3]; get_players(players, num);
    for(new i=0; i<num; i++) {
        if(g_szPlayerClan[players[i]][0]) continue;
        get_user_name(players[i], szN, 31); num_to_str(players[i], szID, 2); menu_additem(menu, szN, szID);
    }
    menu_display(id, menu, 0); return PLUGIN_HANDLED;
}

public Invite_Handler(id, menu, item) {
    if(item != MENU_EXIT) {
        new szD[3], _a, _c; menu_item_getinfo(menu, item, _a, szD, 2, _, _, _c);
        new t = str_to_num(szD); g_iInviteSource[t] = id;
        new iMenu = menu_create("Accepti invitatia?", "Accept_Handler");
        menu_additem(iMenu, "Da", "1"); menu_additem(iMenu, "Nu", "2"); menu_display(t, iMenu, 0);
    }
    menu_destroy(menu); return PLUGIN_HANDLED;
}

public Accept_Handler(id, menu, item) {
    if(item == 0) {
        new s = g_iInviteSource[id]; 
        if(is_user_connected(s)) {
            copy(g_szPlayerClan[id], 31, g_szPlayerClan[s]); g_iPlayerRank[id] = 1;
            for(new i=1; i<=6; i++) copy(g_szRankNames[id][i], 31, g_szRankNames[s][i]);
            SaveClanData(id); ChatColor(id, "^4[CLAN]^1 Bine ai venit!");
        }
    }
    menu_destroy(menu); return PLUGIN_HANDLED;
}

public ShowRankEditMenu(id) {
    new menu = menu_create("Rankuri", "RankEdit_Handler");
    for(new i=1; i<=6; i++) {
        static szT[64]; formatex(szT, 63, "%s", g_szRankNames[id][i]);
        static szI[2]; num_to_str(i, szI, 1); menu_additem(menu, szT, szI);
    }
    menu_display(id, menu, 0);
}

public RankEdit_Handler(id, menu, item) {
    if(item != MENU_EXIT) { g_iEditingRank[id] = item+1; client_cmd(id, "messagemode SET_RANK_NAME"); }
    menu_destroy(menu); return PLUGIN_HANDLED;
}

public Handle_SetRankName(id) {
    static szN[32]; read_args(szN, 31); remove_quotes(szN); trim(szN);
    if(szN[0]) {
        for(new i=1; i<=32; i++) if(is_user_connected(i) && equal(g_szPlayerClan[id], g_szPlayerClan[i])) copy(g_szRankNames[i][g_iEditingRank[id]], 31, szN);
        SaveRankNames(id);
    }
    ShowRankEditMenu(id); return PLUGIN_HANDLED;
}

// --- ADMIN TOOLS SI TOP ---
public Cmd_DeleteClan(id) {
    if(!(get_user_flags(id) & ADMIN_ACCESS_FLAG)) return PLUGIN_HANDLED;
    client_cmd(id, "messagemode DEL_CLAN_CMD");
    register_clcmd("DEL_CLAN_CMD", "Handle_DelClan");
    return PLUGIN_HANDLED;
}

public Handle_DelClan(id) {
    static szC[32]; read_args(szC, 31); remove_quotes(szC); trim(szC);
    if(!szC[0]) return PLUGIN_HANDLED;
    nvault_remove(g_vault_xp, szC);
    for(new i=1; i<=32; i++) if(is_user_connected(i) && equal(g_szPlayerClan[i], szC)) { g_szPlayerClan[i][0] = 0; SaveClanData(i); }
    ChatColor(id, "^4[CLAN]^1 Sters."); return PLUGIN_HANDLED;
}

public Cmd_ClanTop(id) {
    static szPath[128]; get_configsdir(szPath, 127);
    add(szPath, 127, "/clan_top.txt");
    if(!file_exists(szPath)) return PLUGIN_HANDLED;
    static szFile[2048], szRows[1024]; new iFile = fopen(szPath, "rt"), iLen = 0;
    while(!feof(iFile)) iLen += fgets(iFile, szFile[iLen], 2047-iLen);
    fclose(iFile);
    new iRLen = 0, players[32], num, target, iC = 0; static szF[10][32]; get_players(players, num);
    for(new i = 0; i < num; i++) {
        target = players[i]; if(!g_szPlayerClan[target][0]) continue;
        new bool:bE = false; for(new j = 0; j < iC; j++) if(equal(g_szPlayerClan[target], szF[j])) { bE = true; break; }
        if(!bE && iC < 10) {
            copy(szF[iC], 31, g_szPlayerClan[target]);
            new iX = nvault_get(g_vault_xp, szF[iC]);
            iRLen += formatex(szRows[iRLen], 1023-iRLen, "<tr><td>%d</td><td>%s</td><td>%d</td></tr>", iC+1, szF[iC], iX);
            iC++;
        }
    }
    replace(szFile, 2047, "%CLAN_ROWS%", szRows[0] ? szRows : "<tr><td>-</td><td>Fara clanuri</td><td>0</td></tr>");
    show_motd(id, szFile, "Top"); return PLUGIN_HANDLED;
}

// --- UTILS SI VAULT ---
public Cmd_ClanHelp(id) {
    static szP[128]; get_configsdir(szP, 127); add(szP, 127, "/clan_help.txt");
    if(file_exists(szP)) show_motd(id, szP, "Help");
    return PLUGIN_HANDLED;
}

public Cmd_MyXP(id) { ChatColor(id, "^4[CLAN]^1 XP: ^3%d", g_iMemberXP[id]); return PLUGIN_HANDLED; }

public Cmd_ResetClanXP(id, l, c) {
    if(!cmd_access(id, l, c, 2)) return PLUGIN_HANDLED;
    static szC[32]; read_argv(1, szC, 31); nvault_set(g_vault_xp, szC, "0"); return PLUGIN_HANDLED;
}

public Cmd_ResetAllXP(id, l, c) {
    if(!cmd_access(id, l, c, 1)) return PLUGIN_HANDLED;
    nvault_prune(g_vault_xp, 0, get_systime()+1); return PLUGIN_HANDLED;
}

public Handle_SetClanName(id) {
    read_args(g_szTempClanName[id], 31); remove_quotes(g_szTempClanName[id]); trim(g_szTempClanName[id]);
    Cmd_CreateClan(id); return PLUGIN_HANDLED;
}

public SaveClanData(id) {
    static szD[128]; formatex(szD, 127, "^"%s^" %d %d", g_szPlayerClan[id], g_iPlayerRank[id], g_iMemberXP[id]);
    nvault_set(g_vault_clans, g_szAuthID[id], szD);
}

public LoadClanData(id) {
    static szD[128], szC[32], szR[3], szX[10];
    if(nvault_get(g_vault_clans, g_szAuthID[id], szD, 127)) {
        parse(szD, szC, 31, szR, 2, szX, 9);
        copy(g_szPlayerClan[id], 31, szC); g_iPlayerRank[id] = str_to_num(szR); g_iMemberXP[id] = str_to_num(szX);
        LoadRankNames(id);
    }
}

public SaveRankNames(id) {
    static szK[64], szD[256]; formatex(szK, 63, "RN_%s", g_szPlayerClan[id]);
    new l = 0; for(new i=1; i<=6; i++) l += formatex(szD[l], 255-l, "^"%s^" ", g_szRankNames[id][i]);
    nvault_set(g_vault_ranks, szK, szD);
}

public LoadRankNames(id) {
    static szK[64], szD[256]; formatex(szK, 63, "RN_%s", g_szPlayerClan[id]);
    if(nvault_get(g_vault_ranks, szK, szD, 255)) parse(szD, g_szRankNames[id][1], 31, g_szRankNames[id][2], 31, g_szRankNames[id][3], 31, g_szRankNames[id][4], 31, g_szRankNames[id][5], 31, g_szRankNames[id][6], 31);
}

stock ChatColor(id, const msg[], any:...) {
    static szM[191]; vformat(szM, 190, msg, 3);
    static m_id; if(!m_id) m_id = get_user_msgid("SayText");
    message_begin(id ? MSG_ONE_UNRELIABLE : MSG_ALL, m_id, _, id);
    write_byte(id ? id : 1); write_string(szM); message_end();
}

clan_top.txt [configs/]:
Code:
<html>
<head>
<style type="text/css">
    body {
        background-color: #000000;
        font-family: Tahoma, Geneva, sans-serif;
        color: #FFFFFF;
        margin: 15px;
    }
    h2 { 
        color: #FF8C00; 
        text-align: center; 
        text-transform: uppercase;
        border-bottom: 1px solid #333;
        padding-bottom: 10px;
    }
    table { 
        width: 100%; 
        border-collapse: collapse; 
        margin-top: 10px;
        background-color: #111;
    }
    th { 
        background-color: #222; 
        color: #FFD700; 
        padding: 10px; 
        border: 1px solid #333;
        font-size: 14px;
    }
    td { 
        padding: 8px; 
        border: 1px solid #222; 
        text-align: center;
        font-size: 13px;
    }
    tr:nth-child(even) {
        background-color: #161616;
    }
    .footer {
        text-align: center;
        margin-top: 20px;
        font-size: 10px;
        color: #555;
    }
</style>
</head>
<body>

<h2>Top 10 Clanuri - WTFCS</h2>

<table>
    <thead>
        <tr>
            <th>Loc</th>
            <th>Nume Clan</th>
            <th>XP Colectat</th>
        </tr>
    </thead>
    <tbody>
        %CLAN_ROWS%
    </tbody>
</table>

<div class="footer">
    Clasamentul se actualizeaza in timp real pe baza activitatii jucatorilor online.
</div>

</body>
</html>

clan_help.txt [configs/]:
Code:
<html>
<head>
<style type="text/css">
    body {
        background-color: #000000;
        font-family: Verdana, Geneva, sans-serif;
        color: #FFFFFF;
        margin: 20px;
    }
    h1 { color: #FFD700; text-align: center; border-bottom: 2px solid #FFD700; }
    h2 { color: #4CAF50; border-left: 5px solid #4CAF50; padding-left: 10px; }
    .cmd { color: #00FF00; font-weight: bold; }
    .desc { color: #CCCCCC; margin-bottom: 10px; }
    table { width: 100%; border-collapse: collapse; margin-top: 15px; }
    th, td { border: 1px solid #444; padding: 8px; text-align: left; }
    th { background-color: #333; color: #FFD700; }
</style>
</head>
<body>

<h1>Sistemul de Clanuri - WTFCS</h1>

<h2>Comenzi Jucatori</h2>
<ul>
    <li><span class="cmd">/clan</span> - Deschide meniul principal al clanului (XP, Membri, Management).</li>
    <li><span class="cmd">/c &lt;mesaj&gt;</span> - Trimite un mesaj privat vizibil doar membrilor din clanul tau.</li>
    <li><span class="cmd">/myclanxp</span> - Vezi cat XP ai contribuit tu personal la clan.</li>
    <li><span class="cmd">/clantop</span> - Afiseaza topul celor mai puternice clanuri.</li>
    <li><span class="cmd">/invite</span> - (Doar Lider) Invita un jucator online in clanul tau.</li>
</ul>

<h2>Sistemul de Clan XP</h2>
<p>Ajuta-ti clanul sa urce in top prin activitatea ta pe server:</p>
<table>
    <tr>
        <th>Actiune</th>
        <th>Recompensa</th>
    </tr>
    <tr>
        <td>Kill normal</td>
        <td>+1 Clan XP</td>
    </tr>
    <tr>
        <td>Headshot</td>
        <td>+3 Clan XP</td>
    </tr>
    <tr>
        <td>Kill cu Cutitul</td>
        <td>+5 Clan XP</td>
    </tr>
    <tr>
        <td>Plantare/Dezamorsare Bomba</td>
        <td>+3 Clan XP</td>
    </tr>
</table>

<h2>Ierarhie (Rankuri)</h2>
<p>Fiecare clan are 6 rank-uri. Liderul (Rank 6) are control total asupra numelor rank-urilor si membrilor.</p>

<p align="center" style="color: #666; font-size: 10px;">Plugin creat special pentru comunitatea WTFCS</p>

</body>
</html>

Nume: Clan System+
Versiune: 0.5
Link oficial: -

Instalare:
1. Fisierul clan_system.sma il puneti in addons/amxmodx/scripting
2. Fisierul clan_system.amxx il puneti in addons/amxmodx/plugins
3. Intrati in fisierul addons/amxmodx/configs/plugins.ini si adaugati la urma:
Code:
clan_system.amxx
4. Creati in /cstrike/addons/amxmodx/configs, fisierul clan_top.txt si puneti codul de mai sus
5. Creati in /cstrike/addons/amxmodx/configs, fisierul clan_help.txt si puneti codul de mai sus

Cvar-uri (se adauga in fisierul amxmodx\configs\amxx.cfg):


Comenzi administrative (se tasteaza in consola si trebuie sa fiti administrator):
/createclan - Deschide meniul de creație. Necesită selectarea unui Owner (care trebuie să fie online și fără alt clan) și setarea unui nume.

/clandelete - Permite ștergerea definitivă a unui clan prin introducerea numelui acestuia.

amx_deleteclanxp <nume> - (Consolă) Resetează experiența unui anumit clan la 0.

amx_deleteallclanxp - (Consolă) Șterge baza de date de XP pentru toate clanurile de pe server.

Comenzi publice (se tasteaza in joc prin apasarea tastei Y):
/clan - Deschide meniul principal. Aici poți vedea XP-ul total, lista membrilor online și opțiunile de administrare (dacă ești Lider).

/c <mesaj> - Chat privat. Mesajul va apărea sub forma: [NumeRank] Nume : mesaj și va fi văzut doar de colegii de clan.

/clantop - Afișează o fereastră (MOTD) cu cele mai bune 10 clanuri de pe server în funcție de XP.

/myclanxp - Îți arată cât de mult ai contribuit tu personal la progresul clanului tău.

/clanhelp - Deschide un manual de utilizare (din clan_help.txt).

/invite - Deschide meniul de invitații (disponibil doar pentru Rank 6).

Module necesare (se sterge ; din fata modulului de mai jos; acestea le gasiti in fisierul amxmodx\configs\modules.ini):
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <nvault>

Imagini:

Pentru buguri si sugestii, va rog sa lasati un reply.

BIG UPDATE V1.2
Autor: mihay111 / Gemini GPT
Descriere: Un sistem de clanuri avansat și competitiv pentru CS 1.6. Transformă experiența de joc dintr-una individuală în una de echipă. Jucătorii pot forma alianțe, pot strânge XP împreună, pot crește nivelul clanului și pot declara războaie (Clan Wars) pe mize de XP împotriva altor clanuri de pe server.

🌟 Caracteristici Principale
Sistem de Niveluri Dinamic: Clanurile avansează în nivel (1-10) pe baza XP-ului acumulat. Promovările și retrogradările sunt 100% automate.

Clan Wars (Lupte între Clanuri): Sistem automatizat de războaie 5v5 (sau mai mari) pe durată fixă de 15 minute, cu o miză de 500 XP per luptă.

Ierarhie Personalizabilă: Fiecare clan are 6 Rank-uri. Liderul (Rank 6) poate redenumi aceste rank-uri cum dorește.

Tag-uri Custom pentru Chat: Liderul poate alege un Tag de maxim 4 litere care va apărea în fața numelui pe chat-ul privat al clanului.

Statistici Membri: Orice membru poate vedea performanța colegilor săi din meniul clanului (Kills, Deaths, Headshots și XP-ul generat pentru clan), folosind date extrase direct din server (CSStats).

Top 10 Global: Un clasament afișat în format HTML care citește direct din baza de date cele mai bune 10 clanuri din istoria serverului, ordonate după nivel și XP.

🎮 Cum se obține XP în Clan?
Kill normal: +1 XP

Headshot: +3 XP

Plantare Bombă: +3 XP

Dezamorsare Bombă: +3 XP

Kill cu Cuțitul: +5 XP

Regulă anti-abuz: Nu primești NICIODATĂ XP dacă omori un membru din propriul tău clan.

🏆 Sistemul de Niveluri (Clan Levels)
Nivelul crește și scade automat în funcție de XP-ul curent al clanului:

Level 1: 0 - 499 XP

Level 2: 500 XP

Level 3: 1.200 XP (Nivelul minim necesar pentru a participa la Clan Wars)

Level 4: 2.500 XP

Level 5: 3.250 XP

Level 6: 4.000 XP

Level 7: 6.500 XP

Level 8: 9.500 XP

Level 9: 13.000 XP

Level 10 (MAX): 17.500+ XP

⚔️ Regulament Clan Wars (Meniul /clan)
Cine poate iniția: Doar membrii cu Rank 5 sau Rank 6 (Lider).

Condiții de pornire: 1. Harta trebuie să mai aibă minim 17 minute până la schimbare.
2. Ambele clanuri trebuie să aibă minim 5 membri online.
3. Ambele clanuri trebuie să aibă minim Level 3 (min. 1200 XP) și să poată acoperi miza.

Miza: 500 XP. Clanul care face cele mai multe kill-uri pe durata a 15 minute câștigă war-ul, ia 500 XP în plus, iar pierzătorului i se scade 500 XP. De asemenea, câștigătorul primește "+1 Victorii War" în Top 10.

Anti-Abandon: Dacă un war a început, timer-ul de 15 minute nu se oprește chiar dacă unii jucători ies de pe server.

📜 Comenzi Jucători (Chat)
/clan - Deschide meniul principal al clanului tău (Membri, Rankuri, Invitații, Tag, Clan War, Părăsește).

/clans - Afișează lista tuturor clanurilor active în acel moment pe server și membrii lor online.

/clantop - Afișează fereastra MOTD cu Top 10 cele mai bune clanuri (XP, Nivel, Victorii War).

/myclanxp - Afișează în chat cât XP ai contribuit tu personal pentru clanul tău.

/clanhelp - Deschide un fișier de ajutor (necesită crearea clan_help.txt în folderul configs).

/c <mesaj> - Trimite un mesaj pe chat-ul privat al clanului tău (ex: /c salut baieti!).

🛡️ Comenzi Admin (Chat & Consolă)
say /createclan - Deschide meniul de creare a unui clan nou și atribuirea unui Lider.

say /clandelete - Permite ștergerea definitivă a unui clan de pe server.

amx_stopclanwar - Deschide un meniu pe ecran pentru a opri forțat un război activ. War-ul este anulat fără ca vreun clan să piardă XP-ul pus la miză (util în caz de abuz, codați la war, etc.).

amx_deleteclanxp <NumeClan> - Resetează XP-ul unui anumit clan la 0.

amx_deleteallclanxp - Șterge XP-ul tuturor clanurilor (Wipe).

⚙️ CVAR-uri (se adaugă în amxx.cfg)
clan_xp_rivals_only "0"

0 (Implicit) = Jucătorii dintr-un clan primesc XP dacă omoară pe oricine (atâta timp cât nu e colegul lor de clan).

1 = Mod Hardcore: Jucătorii dintr-un clan primesc XP DOAR dacă victima lor face parte dintr-un alt clan advers. (Kills-urile pe jucătorii fără clan nu se punctează).

💾 Salvare Date (Vault)
Toate datele sunt salvate în siguranță în addons/amxmodx/data/vault/ prin modulele standard nVault. Numele bazelor de date sunt:

clans_v10.vault (Numele clanului, Membrii, Rank-ul și XP-ul lor, Tag-ul clanului)

clan_ranks_v10.vault (Numele personalizate ale rank-urilor)

clan_xp_v10.vault (XP-ul total al fiecărui clan și numărul de victorii la Clan War)

downlad sursa [pt compilare aveti nevoie de nvault_util.inc:
You do not have permission to view link Log in or register now.
]
Code:
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <csx>
#include <nvault>
#include <nvault_util>

#define PLUGIN "Clan System+"
#define VERSION "1.2"
#define AUTHOR "mihay111/Gemini GPT"
#define ADMIN_ACCESS_FLAG (ADMIN_ALL|ADMIN_IMMUNITY|ADMIN_RESERVATION|ADMIN_KICK|ADMIN_BAN|ADMIN_SLAY|ADMIN_MAP|ADMIN_CVAR|ADMIN_CFG|ADMIN_CHAT|ADMIN_VOTE|ADMIN_PASSWORD|ADMIN_RCON|ADMIN_LEVEL_A|ADMIN_LEVEL_B|ADMIN_LEVEL_C|ADMIN_LEVEL_D|ADMIN_LEVEL_E|ADMIN_LEVEL_F|ADMIN_LEVEL_G|ADMIN_LEVEL_H|ADMIN_MENU)

// --- CLAN WARS VARIABLES ---
#define WAGER_XP 500
#define MIN_MEMBERS_WAR 5
#define WAR_DURATION_SEC 900.0 // 15 minute

#define MAX_WARS 3
new g_szWarClan1[MAX_WARS][32], g_szWarClan2[MAX_WARS][32];
new g_iWarScore1[MAX_WARS], g_iWarScore2[MAX_WARS];
new bool:g_bWarActive[MAX_WARS];
new g_szChallengeFrom[33][32]; 
new g_iWarChallengerID[33]; 

new g_vault_clans, g_vault_ranks, g_vault_xp;
new g_szPlayerClan[33][32], g_iPlayerRank[33], g_iMemberXP[33];
new g_szRankNames[33][7][32], g_szAuthID[33][35];
new g_iTargetOwner[33], g_szTempClanName[33][32], g_iInviteSource[33], g_iEditingRank[33], g_iManagingMember[33];
new g_szClanTag[33][8];

new g_pCvarClanRivalsOnly;

public plugin_init() {
    register_plugin(PLUGIN, VERSION, AUTHOR);

    register_clcmd("say /createclan", "Cmd_CreateClan", ADMIN_ACCESS_FLAG);
    register_clcmd("say /clandelete", "Cmd_DeleteClan", ADMIN_ACCESS_FLAG);
    register_concmd("amx_deleteclanxp", "Cmd_ResetClanXP", ADMIN_ACCESS_FLAG);
    register_concmd("amx_deleteallclanxp", "Cmd_ResetAllXP", ADMIN_ACCESS_FLAG);
    
    // Comanda admin oprire war
    register_concmd("amx_stopclanwar", "Cmd_StopClanWar", ADMIN_ACCESS_FLAG, "- Opreste un war activ fara a penaliza");

    register_clcmd("say /clan", "Cmd_ClanMenu");
    register_clcmd("say /clans", "Cmd_AllClans");
    register_clcmd("say /invite", "Cmd_Invite");
    register_clcmd("say /myclanxp", "Cmd_MyXP");
    register_clcmd("say /clanhelp", "Cmd_ClanHelp");
    register_clcmd("say /clantop", "Cmd_ClanTop");
    register_clcmd("say", "Handle_SayCommands");

    register_event("DeathMsg", "Event_DeathMsg", "a");
    register_logevent("Event_BombPlanted", 3, "2=Planted_The_Bomb");
    register_logevent("Event_BombDefused", 3, "2=Defused_The_Bomb");

    register_clcmd("SET_CLAN_NAME", "Handle_SetClanName");
    register_clcmd("SET_RANK_NAME", "Handle_SetRankName");
    register_clcmd("SET_CLAN_TAG", "Handle_SetClanTag");

    // Folosim aceleasi vault-uri ca sa nu pierdem nicio data!
    g_vault_clans = nvault_open("clans_v10");
    g_vault_ranks = nvault_open("clan_ranks_v10");
    g_vault_xp = nvault_open("clan_xp_v10");

    g_pCvarClanRivalsOnly = register_cvar("clan_xp_rivals_only", "0");
}

public plugin_end() {
    nvault_close(g_vault_clans); 
    nvault_close(g_vault_ranks); 
    nvault_close(g_vault_xp);
}

public client_putinserver(id) {
    get_user_authid(id, g_szAuthID[id], 34);
    g_szPlayerClan[id][0] = 0; 
    g_iPlayerRank[id] = 0; 
    g_iMemberXP[id] = 0;
    
    for(new i=1; i<=6; i++) {
        formatex(g_szRankNames[id][i], 31, "Rank %d", i);
    }
    
    LoadClanData(id);
}

// --- FUNCTIE CALCUL LEVEL CLAN ---
stock GetClanLevel(xp) {
    if(xp >= 17500) return 10;
    if(xp >= 13000) return 9;
    if(xp >= 9500) return 8;
    if(xp >= 6500) return 7;
    if(xp >= 4000) return 6;
    if(xp >= 3250) return 5;
    if(xp >= 2500) return 4;
    if(xp >= 1200) return 3;
    if(xp >= 500) return 2;
    return 1;
}

// --- LOGICA XP SI EVENIMENTE ---
public AddClanXP(id, iAmount) {
    if(!is_user_connected(id) || !g_szPlayerClan[id][0]) return;
    g_iMemberXP[id] += iAmount; 
    SaveClanData(id);
    
    new szK[64]; copy(szK, 63, g_szPlayerClan[id]);
    new iT = nvault_get(g_vault_xp, szK);
    
    static szT[16]; num_to_str(iT + iAmount, szT, 15); 
    nvault_set(g_vault_xp, szK, szT);
}

public Event_DeathMsg() {
    new killer = read_data(1);
    new victim = read_data(2);
    new headshot = read_data(3);
    static szWeapon[24]; read_data(4, szWeapon, 23);

    if(!killer || killer == victim || !is_user_connected(killer) || !is_user_connected(victim)) return;
    if(!g_szPlayerClan[killer][0]) return;
    if(equal(g_szPlayerClan[killer], g_szPlayerClan[victim])) return;

    if(get_pcvar_num(g_pCvarClanRivalsOnly) == 1 && !g_szPlayerClan[victim][0]) return;

    // Adaugam scor pt War daca e activ
    for(new i=0; i<MAX_WARS; i++) {
        if(g_bWarActive[i]) {
            if(equal(g_szPlayerClan[killer], g_szWarClan1[i]) && equal(g_szPlayerClan[victim], g_szWarClan2[i])) g_iWarScore1[i]++;
            else if(equal(g_szPlayerClan[killer], g_szWarClan2[i]) && equal(g_szPlayerClan[victim], g_szWarClan1[i])) g_iWarScore2[i]++;
        }
    }

    if(containi(szWeapon, "knife") != -1) AddClanXP(killer, 5);
    else if(headshot) AddClanXP(killer, 3);
    else AddClanXP(killer, 1);
}

public Event_BombPlanted() {
    new loguser[80], name[32]; read_logargv(0, loguser, 79); parse_loguser(loguser, name, 31);
    new id = get_user_index(name); if(is_user_connected(id)) AddClanXP(id, 3);
}

public Event_BombDefused() {
    new loguser[80], name[32]; read_logargv(0, loguser, 79); parse_loguser(loguser, name, 31);
    new id = get_user_index(name); if(is_user_connected(id)) AddClanXP(id, 3);
}

// --- CHAT SI COMENZI ---
public Handle_SayCommands(id) {
    static szArgs[192]; read_args(szArgs, 191); remove_quotes(szArgs);
    
    if(containi(szArgs, "/c ") == 0) {
        if(!g_szPlayerClan[id][0]) return PLUGIN_HANDLED;
        
        static szChatMsg[192], szName[32]; get_user_name(id, szName, 31);
        formatex(szChatMsg, 191, "^1[^4%s^1] [^3%s^1] ^4%s ^1: %s", g_szClanTag[id], g_szRankNames[id][g_iPlayerRank[id]], szName, szArgs[3]);
        
        new players[32], num, target; get_players(players, num);
        for(new i=0; i<num; i++) {
            target = players[i];
            if(is_user_connected(target) && equal(g_szPlayerClan[id], g_szPlayerClan[target]))
                ChatColor(target, szChatMsg);
        }
        return PLUGIN_HANDLED;
    }
    return PLUGIN_CONTINUE;
}

// --- CREATE CLAN ---
public Cmd_CreateClan(id) {
    if(!(get_user_flags(id) & ADMIN_ACCESS_FLAG)) return PLUGIN_HANDLED;
    
    new menu = menu_create("\r[WTFCS]\w Create Clan", "AdminCreate_Handler");
    static sz1[64], sz2[64], szN[32];
    
    if(g_iTargetOwner[id] && is_user_connected(g_iTargetOwner[id])) get_user_name(g_iTargetOwner[id], szN, 31); 
    else copy(szN, 31, "Neselectat");
    
    formatex(sz1, 63, "Owner: \y%s", szN);
    formatex(sz2, 63, "Nume: \y%s", g_szTempClanName[id][0] ? g_szTempClanName[id] : "Nesetat");
    
    menu_additem(menu, sz1, "1"); menu_additem(menu, sz2, "2");
    menu_additem(menu, "\r[FINALIZEAZA]", "3");
    
    menu_display(id, menu, 0);
    return PLUGIN_HANDLED;
}

public AdminCreate_Handler(id, menu, item) {
    if(item == MENU_EXIT) { menu_destroy(menu); return PLUGIN_HANDLED; }
    
    switch(item) {
        case 0: {
            new pMenu = menu_create("Alege Owner", "OwnerSelect_Handler");
            new players[32], num, szN[32], szID[3]; get_players(players, num);
            for(new i=0; i<num; i++) {
                if(g_szPlayerClan[players[i]][0]) continue;
                get_user_name(players[i], szN, 31); num_to_str(players[i], szID, 2);
                menu_additem(pMenu, szN, szID);
            }
            menu_display(id, pMenu, 0);
        }
        case 1: client_cmd(id, "messagemode SET_CLAN_NAME");
        case 2: {
            new target = g_iTargetOwner[id];
            if(!is_user_connected(target)) { ChatColor(id, "^4[ERR]^1 Jucator offline."); return PLUGIN_HANDLED; }
            if(g_szPlayerClan[target][0]) { ChatColor(id, "^4[ERR]^1 Are deja clan."); return PLUGIN_HANDLED; }
            if(!g_szTempClanName[id][0]) { ChatColor(id, "^4[ERR]^1 Seteaza numele!"); return PLUGIN_HANDLED; }
            
            copy(g_szPlayerClan[target], 31, g_szTempClanName[id]);
            g_iPlayerRank[target] = 6; SaveClanData(target);
            ChatColor(0, "^4[CLAN]^1 Clan creat: ^3%s^1. Lider: ^4%n", g_szTempClanName[id], target);
        }
    }
    menu_destroy(menu); return PLUGIN_HANDLED;
}

public OwnerSelect_Handler(id, menu, item) {
    if(item != MENU_EXIT) {
        new szD[3], _a, _c; menu_item_getinfo(menu, item, _a, szD, 2, _, _, _c);
        g_iTargetOwner[id] = str_to_num(szD); Cmd_CreateClan(id);
    }
    menu_destroy(menu); return PLUGIN_HANDLED;
}

// --- MENIU CLAN ---
public Cmd_ClanMenu(id) {
    if(!g_szPlayerClan[id][0]) { ChatColor(id, "^4[CLAN]^1 Nu ai clan."); return PLUGIN_HANDLED; }
    
    new iTotalXP = nvault_get(g_vault_xp, g_szPlayerClan[id]);
    new cLevel = GetClanLevel(iTotalXP);
    
    static szTitle[128]; 
    formatex(szTitle, 127, "\r[CLAN]\w %s^n\dLevel:\y %d \d| XP Total:\y %d", g_szPlayerClan[id], cLevel, iTotalXP);
    
    new menu = menu_create(szTitle, "PlayerMenu_Handler");
    menu_additem(menu, "Membri", "1");
    
    if(g_iPlayerRank[id] == 6) {
        menu_additem(menu, "Rankuri", "2");
        menu_additem(menu, "Invita", "3");
        menu_additem(menu, "Setare Tag", "4");
    }
    
    if(g_iPlayerRank[id] >= 5) {
        menu_additem(menu, "\yStart Clan War\w", "5");
    }
    
    if(g_iPlayerRank[id] != 6) {
        menu_additem(menu, "Paraseste", "6");
    }
    
    menu_display(id, menu, 0); 
    return PLUGIN_HANDLED;
}

public PlayerMenu_Handler(id, menu, item) {
    if(item == MENU_EXIT) { menu_destroy(menu); return PLUGIN_HANDLED; }
    
    new szData[3], _a, _c; menu_item_getinfo(menu, item, _a, szData, 2, _, _, _c);
    new iChoice = str_to_num(szData);
    
    switch(iChoice) {
        case 1: ShowMembersMenu(id);
        case 2: if(g_iPlayerRank[id] == 6) ShowRankEditMenu(id);
        case 3: if(g_iPlayerRank[id] == 6) Cmd_Invite(id);
        case 4: if(g_iPlayerRank[id] == 6) client_cmd(id, "messagemode SET_CLAN_TAG");
        case 5: if(g_iPlayerRank[id] >= 5) Cmd_WarMenu(id);
        case 6: {
            if(g_iPlayerRank[id] != 6) {
                g_szPlayerClan[id][0] = 0; SaveClanData(id); 
                ChatColor(id, "^4[CLAN]^1 Ai parasit clanul.");
            }
        }
    }
    menu_destroy(menu); return PLUGIN_HANDLED;
}

public ShowMembersMenu(id) {
    new menu = menu_create("Membri Clan", "MemberMgmt_Handler");
    new players[32], num, szN[32], szID[3], szT[128]; get_players(players, num);
    
    for(new i=0; i<num; i++) {
        if(!equal(g_szPlayerClan[id], g_szPlayerClan[players[i]])) continue;
        
        get_user_name(players[i], szN, 31); num_to_str(players[i], szID, 2);
        formatex(szT, 127, "%s \d[%s] \r[%d XP]", szN, g_szRankNames[id][g_iPlayerRank[players[i]]], g_iMemberXP[players[i]]);
        menu_additem(menu, szT, szID);
    }
    menu_display(id, menu, 0);
}

public MemberMgmt_Handler(id, menu, item) {
    if(item != MENU_EXIT) {
        new szD[3], _a, _c; menu_item_getinfo(menu, item, _a, szD, 2, _, _, _c);
        new target = str_to_num(szD);
        
        if(!is_user_connected(target)) { ChatColor(id, "^4[CLAN]^1 Jucatorul s-a deconectat."); menu_destroy(menu); return PLUGIN_HANDLED; }
        
        g_iManagingMember[id] = target;
        new szTargetName[32], szTitle[64]; get_user_name(target, szTargetName, 31);
        formatex(szTitle, 63, "\r[WTFCS]\w Optiuni: \y%s", szTargetName);
        
        new pMenu = menu_create(szTitle, "MemberOptions_Handler");
        menu_additem(pMenu, "Vezi Statistici", "1"); 
        
        if(g_iPlayerRank[id] == 6 && id != target) {
            menu_additem(pMenu, "Modifica Rank", "2"); 
            menu_additem(pMenu, "Elimina (Kick)", "3"); 
        }
        menu_display(id, pMenu, 0);
    }
    menu_destroy(menu); return PLUGIN_HANDLED;
}

public MemberOptions_Handler(id, menu, item) {
    if(item != MENU_EXIT) {
        new szD[3], _a, _c; menu_item_getinfo(menu, item, _a, szD, 2, _, _, _c);
        new option = str_to_num(szD);
        new target = g_iManagingMember[id];
        
        if(!is_user_connected(target)) { ChatColor(id, "^4[CLAN]^1 Jucatorul s-a deconectat."); menu_destroy(menu); return PLUGIN_HANDLED; }

        if(option == 1) {
            new stats[8], bodyhits[8]; get_user_stats(target, stats, bodyhits); 
            new szName[32]; get_user_name(target, szName, 31);
            ChatColor(id, "^4[CLAN]^1 Stats ^3%s^1:", szName);
            ChatColor(id, "^4->^1 Kills: ^3%d^1 | Deaths: ^3%d^1 | HS: ^3%d", stats[0], stats[1], stats[2]);
            ChatColor(id, "^4->^1 XP Contribuit: ^3%d XP", g_iMemberXP[target]);
        } 
        else if(option == 2 && g_iPlayerRank[id] == 6) {
            new rMenu = menu_create("Alege Rank", "RankChange_Handler");
            for(new i=1; i<=6; i++) {
                new szI[2]; num_to_str(i, szI, 1);
                menu_additem(rMenu, g_szRankNames[id][i], szI);
            }
            menu_display(id, rMenu, 0); return PLUGIN_HANDLED; 
        } 
        else if(option == 3 && g_iPlayerRank[id] == 6) {
            new szName[32]; get_user_name(target, szName, 31);
            g_szPlayerClan[target][0] = 0; SaveClanData(target); 
            ChatColor(target, "^4[CLAN]^1 Ai fost eliminat din clan.");
            ChatColor(id, "^4[CLAN]^1 L-ai eliminat pe ^3%s^1.", szName);
        }
    }
    menu_destroy(menu); return PLUGIN_HANDLED;
}

public RankChange_Handler(id, menu, item) {
    if(item != MENU_EXIT) {
        new szD[2], _a, _c; menu_item_getinfo(menu, item, _a, szD, 1, _, _, _c);
        g_iPlayerRank[g_iManagingMember[id]] = str_to_num(szD);
        SaveClanData(g_iManagingMember[id]); ChatColor(id, "^4[CLAN]^1 Rank actualizat.");
    }
    menu_destroy(menu); return PLUGIN_HANDLED;
}

// --- /CLANS MENU ---
public Cmd_AllClans(id) {
    new menu = menu_create("\r[WTFCS]\w Lista Clanuri Active", "AllClans_Handler");
    new players[32], num, target; get_players(players, num);
    static szAddedClans[32][32]; new iAddedCount = 0;
    
    for(new i = 0; i < num; i++) {
        target = players[i];
        if(!g_szPlayerClan[target][0]) continue; 
        
        new bool:bAlreadyAdded = false;
        for(new j = 0; j < iAddedCount; j++) {
            if(equal(g_szPlayerClan[target], szAddedClans[j])) { bAlreadyAdded = true; break; }
        }
        
        if(!bAlreadyAdded) {
            copy(szAddedClans[iAddedCount], 31, g_szPlayerClan[target]);
            iAddedCount++;
            new iTotalXP = nvault_get(g_vault_xp, g_szPlayerClan[target]);
            new cLevel = GetClanLevel(iTotalXP);
            
            static szItem[64]; 
            formatex(szItem, 63, "\r[Lv. %d]\y %s \d[\y%d XP\d]", cLevel, g_szPlayerClan[target], iTotalXP);
            menu_additem(menu, szItem, g_szPlayerClan[target]);
        }
    }
    
    if(iAddedCount == 0) { ChatColor(id, "^4[CLAN]^1 Nu exista clanuri active pe server in acest moment."); menu_destroy(menu); return PLUGIN_HANDLED; }
    menu_display(id, menu, 0); return PLUGIN_HANDLED;
}

public AllClans_Handler(id, menu, item) {
    if(item == MENU_EXIT) { menu_destroy(menu); return PLUGIN_HANDLED; }
    
    static szClanName[32], _a, _c; menu_item_getinfo(menu, item, _a, szClanName, 31, _, _, _c);
    static szTitle[64]; formatex(szTitle, 63, "\r[WTFCS]\w Membri:\y %s", szClanName);
    
    new mMenu = menu_create(szTitle, "ViewMembers_Handler");
    new players[32], num, target, bFound = 0; get_players(players, num);
    
    for(new i = 0; i < num; i++) {
        target = players[i];
        if(equal(g_szPlayerClan[target], szClanName)) {
            static szName[32], szItem[64]; get_user_name(target, szName, 31);
            formatex(szItem, 63, "%s \d- \y%dxp", szName, g_iMemberXP[target]);
            menu_additem(mMenu, szItem, "1"); 
            bFound++;
        }
    }
    
    if(!bFound) { ChatColor(id, "^4[CLAN]^1 Nu mai este niciun membru online din acest clan."); menu_destroy(mMenu); } 
    else menu_display(id, mMenu, 0); 
    
    menu_destroy(menu); return PLUGIN_HANDLED;
}

public ViewMembers_Handler(id, menu, item) { menu_destroy(menu); return PLUGIN_HANDLED; }

// --- INVITE SI RANK EDIT ---
public Cmd_Invite(id) {
    new menu = menu_create("Invita", "Invite_Handler");
    new players[32], num, szN[32], szID[3]; get_players(players, num);
    
    for(new i=0; i<num; i++) {
        if(g_szPlayerClan[players[i]][0]) continue;
        get_user_name(players[i], szN, 31); num_to_str(players[i], szID, 2); menu_additem(menu, szN, szID);
    }
    menu_display(id, menu, 0); return PLUGIN_HANDLED;
}

public Invite_Handler(id, menu, item) {
    if(item != MENU_EXIT) {
        new szD[3], _a, _c; menu_item_getinfo(menu, item, _a, szD, 2, _, _, _c);
        new t = str_to_num(szD); g_iInviteSource[t] = id;
        
        new iMenu = menu_create("Accepti invitatia?", "Accept_Handler");
        menu_additem(iMenu, "Da", "1"); menu_additem(iMenu, "Nu", "2"); menu_display(t, iMenu, 0);
    }
    menu_destroy(menu); return PLUGIN_HANDLED;
}

public Accept_Handler(id, menu, item) {
    if(item == 0) {
        new s = g_iInviteSource[id]; 
        if(is_user_connected(s)) {
            copy(g_szPlayerClan[id], 31, g_szPlayerClan[s]); g_iPlayerRank[id] = 1;
            for(new i=1; i<=6; i++) copy(g_szRankNames[id][i], 31, g_szRankNames[s][i]);
            SaveClanData(id); ChatColor(id, "^4[CLAN]^1 Bine ai venit!");
        }
    }
    menu_destroy(menu); return PLUGIN_HANDLED;
}

public ShowRankEditMenu(id) {
    new menu = menu_create("Rankuri", "RankEdit_Handler");
    for(new i=1; i<=6; i++) {
        static szT[64]; formatex(szT, 63, "%s", g_szRankNames[id][i]);
        static szI[2]; num_to_str(i, szI, 1); menu_additem(menu, szT, szI);
    }
    menu_display(id, menu, 0);
}

public RankEdit_Handler(id, menu, item) {
    if(item != MENU_EXIT) { g_iEditingRank[id] = item+1; client_cmd(id, "messagemode SET_RANK_NAME"); }
    menu_destroy(menu); return PLUGIN_HANDLED;
}

public Handle_SetRankName(id) {
    static szN[32]; read_args(szN, 31); remove_quotes(szN); trim(szN);
    if(szN[0]) {
        for(new i=1; i<=32; i++) if(is_user_connected(i) && equal(g_szPlayerClan[id], g_szPlayerClan[i])) copy(g_szRankNames[i][g_iEditingRank[id]], 31, szN);
        SaveRankNames(id);
    }
    ShowRankEditMenu(id); return PLUGIN_HANDLED;
}

public Handle_SetClanTag(id) {
    if(g_iPlayerRank[id] != 6 || !g_szPlayerClan[id][0]) return PLUGIN_HANDLED;
    static szTag[32]; read_args(szTag, 31); remove_quotes(szTag); trim(szTag);
    
    if(strlen(szTag) > 4) { ChatColor(id, "^4[CLAN]^1 Tag-ul poate avea maxim 4 litere!"); return PLUGIN_HANDLED; }
    if(strlen(szTag) < 1) return PLUGIN_HANDLED;
    
    for(new i = 1; i <= 32; i++) if(is_user_connected(i) && equal(g_szPlayerClan[id], g_szPlayerClan[i])) copy(g_szClanTag[i], 7, szTag);
    
    static szKey[64]; formatex(szKey, 63, "TAG_%s", g_szPlayerClan[id]);
    nvault_set(g_vault_clans, szKey, szTag);
    ChatColor(id, "^4[CLAN]^1 Tag-ul a fost schimbat in: ^3%s", szTag); return PLUGIN_HANDLED;
}

// --- ADMIN TOOLS SI TOP ---
public Cmd_DeleteClan(id) {
    if(!(get_user_flags(id) & ADMIN_ACCESS_FLAG)) return PLUGIN_HANDLED;
    client_cmd(id, "messagemode DEL_CLAN_CMD");
    register_clcmd("DEL_CLAN_CMD", "Handle_DelClan"); return PLUGIN_HANDLED;
}

public Handle_DelClan(id) {
    static szC[32]; read_args(szC, 31); remove_quotes(szC); trim(szC);
    if(!szC[0]) return PLUGIN_HANDLED;
    nvault_remove(g_vault_xp, szC);
    
    for(new i=1; i<=32; i++) if(is_user_connected(i) && equal(g_szPlayerClan[i], szC)) { g_szPlayerClan[i][0] = 0; SaveClanData(i); }
    ChatColor(id, "^4[CLAN]^1 Sters."); return PLUGIN_HANDLED;
}

public Cmd_ClanTop(id) {
    static szPath[128]; get_configsdir(szPath, 127); add(szPath, 127, "/clan_top.txt");
    if(!file_exists(szPath)) return PLUGIN_HANDLED;
    
    static szFile[2048], szRows[1536]; new iFile = fopen(szPath, "rt"), iLen = 0;
    while(!feof(iFile)) iLen += fgets(iFile, szFile[iLen], 2047-iLen);
    fclose(iFile);
    
    szRows[0] = 0; new iRLen = 0;
    new top_clans[10][32], top_xp[10], top_wins[10];
    for(new i = 0; i < 10; i++) top_xp[i] = -1;
    
    new util_vault = nvault_util_open("clan_xp_v10");
    if(util_vault) {
        new count = nvault_util_count(util_vault);
        new key[64], val[16], timestamp;
        
        for(new i = 0; i < count; i++) {
            nvault_util_read(util_vault, i, key, 63, val, 15, timestamp);
            if(contain(key, "WINS_") == 0) continue;
            
            new xp = str_to_num(val);
            for(new j = 0; j < 10; j++) {
                if(xp > top_xp[j]) {
                    for(new k = 9; k > j; k--) {
                        top_xp[k] = top_xp[k-1]; copy(top_clans[k], 31, top_clans[k-1]); top_wins[k] = top_wins[k-1];
                    }
                    top_xp[j] = xp; copy(top_clans[j], 31, key);
                    
                    new szWinKey[64]; formatex(szWinKey, 63, "WINS_%s", key);
                    top_wins[j] = nvault_get(g_vault_xp, szWinKey);
                    break;
                }
            }
        }
        nvault_util_close(util_vault);
    }
    
    new bool:bFoundAny = false;
    for(new j = 0; j < 10; j++) {
        if(top_xp[j] != -1) {
            bFoundAny = true;
            new cLevel = GetClanLevel(top_xp[j]);
            iRLen += formatex(szRows[iRLen], 1535-iRLen, "<tr><td>%d</td><td>%s</td><td>%d</td><td>%d</td><td>%d</td></tr>", j+1, top_clans[j], top_xp[j], top_wins[j], cLevel);
        }
    }
    
    replace(szFile, 2047, "%CLAN_ROWS%", bFoundAny ? szRows : "<tr><td colspan='5'>Niciun clan nu a fost gasit in baza de date.</td></tr>");
    show_motd(id, szFile, "Top 10 Clanuri"); return PLUGIN_HANDLED;
}

// --- UTILS SI VAULT ---
public Cmd_ClanHelp(id) {
    static szP[128]; get_configsdir(szP, 127); add(szP, 127, "/clan_help.txt");
    if(file_exists(szP)) show_motd(id, szP, "Help"); return PLUGIN_HANDLED;
}
public Cmd_MyXP(id) { ChatColor(id, "^4[CLAN]^1 XP: ^3%d", g_iMemberXP[id]); return PLUGIN_HANDLED; }
public Cmd_ResetClanXP(id, l, c) {
    if(!cmd_access(id, l, c, 2)) return PLUGIN_HANDLED;
    static szC[32]; read_argv(1, szC, 31); nvault_set(g_vault_xp, szC, "0"); return PLUGIN_HANDLED;
}
public Cmd_ResetAllXP(id, l, c) {
    if(!cmd_access(id, l, c, 1)) return PLUGIN_HANDLED;
    nvault_prune(g_vault_xp, 0, get_systime()+1); return PLUGIN_HANDLED;
}
public Handle_SetClanName(id) {
    read_args(g_szTempClanName[id], 31); remove_quotes(g_szTempClanName[id]); trim(g_szTempClanName[id]);
    Cmd_CreateClan(id); return PLUGIN_HANDLED;
}

public SaveClanData(id) {
    static szD[128]; formatex(szD, 127, "^"%s^" %d %d", g_szPlayerClan[id], g_iPlayerRank[id], g_iMemberXP[id]);
    nvault_set(g_vault_clans, g_szAuthID[id], szD);
}

public LoadClanData(id) {
    static szD[128], szC[32], szR[3], szX[10];
    if(nvault_get(g_vault_clans, g_szAuthID[id], szD, 127)) {
        parse(szD, szC, 31, szR, 2, szX, 9);
        copy(g_szPlayerClan[id], 31, szC); g_iPlayerRank[id] = str_to_num(szR); g_iMemberXP[id] = str_to_num(szX);
        LoadRankNames(id);
        
        static szKey[64], szTag[8]; formatex(szKey, 63, "TAG_%s", g_szPlayerClan[id]);
        if(nvault_get(g_vault_clans, szKey, szTag, 7)) copy(g_szClanTag[id], 7, szTag);
        else copy(g_szClanTag[id], 7, "CLAN");
    }
}

public SaveRankNames(id) {
    static szK[64], szD[256]; formatex(szK, 63, "RN_%s", g_szPlayerClan[id]);
    new l = 0; for(new i=1; i<=6; i++) l += formatex(szD[l], 255-l, "^"%s^" ", g_szRankNames[id][i]);
    nvault_set(g_vault_ranks, szK, szD);
}

public LoadRankNames(id) {
    static szK[64], szD[256]; formatex(szK, 63, "RN_%s", g_szPlayerClan[id]);
    if(nvault_get(g_vault_ranks, szK, szD, 255)) parse(szD, g_szRankNames[id][1], 31, g_szRankNames[id][2], 31, g_szRankNames[id][3], 31, g_szRankNames[id][4], 31, g_szRankNames[id][5], 31, g_szRankNames[id][6], 31);
}

stock ChatColor(id, const msg[], any:...) {
    static szM[191]; vformat(szM, 190, msg, 3);
    static m_id; if(!m_id) m_id = get_user_msgid("SayText");
    message_begin(id ? MSG_ONE_UNRELIABLE : MSG_ALL, m_id, _, id);
    write_byte(id ? id : 1); write_string(szM); message_end();
}

stock CountClanMembers(const szClan[]) {
    new count = 0, players[32], num; get_players(players, num);
    for(new i = 0; i < num; i++) if(equal(g_szPlayerClan[players[i]], szClan)) count++;
    return count;
}

// ==========================================
// ========== SISTEM DE CLAN WARS ===========
// ==========================================
public Cmd_WarMenu(id) {
    if(get_timeleft() < 17 * 60) { ChatColor(id, "^4[WAR]^1 Eroare: Harta trebuie sa mai aiba cel putin 17 minute!"); return PLUGIN_HANDLED; }
    if(CountClanMembers(g_szPlayerClan[id]) < MIN_MEMBERS_WAR) { ChatColor(id, "^4[WAR]^1 Ai nevoie de minim ^3%d^1 membri online pentru war!", MIN_MEMBERS_WAR); return PLUGIN_HANDLED; }
    
    new myClanXP = nvault_get(g_vault_xp, g_szPlayerClan[id]);
    if(GetClanLevel(myClanXP) < 3) {
        ChatColor(id, "^4[WAR]^1 Clanul tau trebuie sa aiba minim ^3Level 3^1 pentru a provoca!");
        return PLUGIN_HANDLED;
    }
    
    for(new i=0; i<MAX_WARS; i++) if(g_bWarActive[i] && (equal(g_szPlayerClan[id], g_szWarClan1[i]) || equal(g_szPlayerClan[id], g_szWarClan2[i]))) {
        ChatColor(id, "^4[WAR]^1 Esti deja intr-un razboi activ!"); return PLUGIN_HANDLED;
    }

    new menu = menu_create("\r[WTFCS]\w Alege Clan pt. War \y(Miza: 500 XP)", "WarMenu_Handler");
    new players[32], num, target; get_players(players, num);
    static szAdded[32][32]; new iAddedCount = 0;
    
    for(new i = 0; i < num; i++) {
        target = players[i];
        if(!g_szPlayerClan[target][0] || equal(g_szPlayerClan[target], g_szPlayerClan[id])) continue;
        
        new bool:bFound = false;
        for(new j = 0; j < iAddedCount; j++) if(equal(szAdded[j], g_szPlayerClan[target])) bFound = true;
        
        if(!bFound) {
            copy(szAdded[iAddedCount], 31, g_szPlayerClan[target]); iAddedCount++;
            new mCount = CountClanMembers(g_szPlayerClan[target]);
            new targetXP = nvault_get(g_vault_xp, g_szPlayerClan[target]);
            new targetLevel = GetClanLevel(targetXP);
            
            static szItem[64];
            if(mCount >= MIN_MEMBERS_WAR && targetLevel >= 3) formatex(szItem, 63, "\y%s \d(%d membri)", g_szPlayerClan[target], mCount);
            else formatex(szItem, 63, "\r%s \d(Indisponibil)", g_szPlayerClan[target]);
            
            menu_additem(menu, szItem, g_szPlayerClan[target]);
        }
    }
    menu_display(id, menu, 0); return PLUGIN_HANDLED;
}

public WarMenu_Handler(id, menu, item) {
    if(item == MENU_EXIT) { menu_destroy(menu); return PLUGIN_HANDLED; }
    
    static szTargetClan[32], _a, _c; menu_item_getinfo(menu, item, _a, szTargetClan, 31, _, _, _c);
    
    if(CountClanMembers(szTargetClan) < MIN_MEMBERS_WAR || GetClanLevel(nvault_get(g_vault_xp, szTargetClan)) < 3) {
        ChatColor(id, "^4[WAR]^1 Acest clan nu indeplineste conditiile (Level < 3 sau < 5 Membri)."); menu_destroy(menu); return PLUGIN_HANDLED;
    }
    
    new targetLeader = 0, players[32], num; get_players(players, num);
    for(new i = 0; i < num; i++) {
        if(equal(g_szPlayerClan[players[i]], szTargetClan) && g_iPlayerRank[players[i]] >= 5) { targetLeader = players[i]; break; }
    }
    
    if(!targetLeader) ChatColor(id, "^4[WAR]^1 Niciun Rank 5/6 advers nu este online pentru provocare!");
    else {
        g_szChallengeFrom[targetLeader] = g_szPlayerClan[id]; g_iWarChallengerID[targetLeader] = id;
        new szTitle[128]; formatex(szTitle, 127, "\r[WAR]\w Clanul \y%s\w provoaca la war!^nMiza: \y500 XP\w | Timp: \y15 Min", g_szPlayerClan[id]);
        
        new pMenu = menu_create(szTitle, "WarAccept_Handler");
        menu_additem(pMenu, "\yAccepta", "1"); menu_additem(pMenu, "\rRefuza", "2");
        menu_display(targetLeader, pMenu, 0);
        ChatColor(id, "^4[WAR]^1 Provocare trimisa...");
    }
    menu_destroy(menu); return PLUGIN_HANDLED;
}

public WarAccept_Handler(id, menu, item) {
    if(item == MENU_EXIT || item == 1) { 
        new challenger = g_iWarChallengerID[id];
        if(is_user_connected(challenger)) ChatColor(challenger, "^4[WAR]^1 Clanul advers a refuzat provocarea.");
        menu_destroy(menu); return PLUGIN_HANDLED;
    }
    
    if(item == 0) { 
        new slot = -1;
        for(new i=0; i<MAX_WARS; i++) if(!g_bWarActive[i]) { slot = i; break; }
        
        if(slot == -1) { ChatColor(id, "^4[WAR]^1 Prea multe razboaie active pe server!"); menu_destroy(menu); return PLUGIN_HANDLED; }
        
        g_bWarActive[slot] = true;
        copy(g_szWarClan1[slot], 31, g_szChallengeFrom[id]);
        copy(g_szWarClan2[slot], 31, g_szPlayerClan[id]);
        g_iWarScore1[slot] = 0; g_iWarScore2[slot] = 0;
        
        ChatColor(0, "^4[WAR]^1 Lupta dintre ^3%s^1 VS ^3%s^1 a inceput! (15 minute)", g_szWarClan1[slot], g_szWarClan2[slot]);
        set_task(WAR_DURATION_SEC, "Task_EndWar", 2000 + slot);
    }
    menu_destroy(menu); return PLUGIN_HANDLED;
}

public Task_EndWar(taskid) {
    new slot = taskid - 2000;
    if(!g_bWarActive[slot]) return;
    
    g_bWarActive[slot] = false;
    new s1 = g_iWarScore1[slot], s2 = g_iWarScore2[slot];
    
    if(s1 > s2) {
        ChatColor(0, "^4[WAR]^1 Clanul ^3%s^1 a castigat lupta contra ^3%s^1! Scorul: %d - %d", g_szWarClan1[slot], g_szWarClan2[slot], s1, s2);
        ApplyWarResults(g_szWarClan1[slot], g_szWarClan2[slot]);
    } else if(s2 > s1) {
        ChatColor(0, "^4[WAR]^1 Clanul ^3%s^1 a castigat lupta contra ^3%s^1! Scorul: %d - %d", g_szWarClan2[slot], g_szWarClan1[slot], s2, s1);
        ApplyWarResults(g_szWarClan2[slot], g_szWarClan1[slot]);
    } else {
        ChatColor(0, "^4[WAR]^1 Lupta dintre ^3%s^1 si ^3%s^1 s-a incheiat la EGALITATE (%d - %d).", g_szWarClan1[slot], g_szWarClan2[slot], s1, s2);
    }
}

stock ApplyWarResults(winner[], loser[]) {
    new wXP = nvault_get(g_vault_xp, winner) + WAGER_XP;
    static szW[16]; num_to_str(wXP, szW, 15); nvault_set(g_vault_xp, winner, szW);
    
    new lXP = nvault_get(g_vault_xp, loser) - WAGER_XP;
    if(lXP < 0) lXP = 0;
    static szL[16]; num_to_str(lXP, szL, 15); nvault_set(g_vault_xp, loser, szL);
    
    static szWinKey[64]; formatex(szWinKey, 63, "WINS_%s", winner);
    new wins = nvault_get(g_vault_xp, szWinKey) + 1;
    static szWin[10]; num_to_str(wins, szWin, 9); nvault_set(g_vault_xp, szWinKey, szWin);
}

// --- COMENZI ADMIN WAR ---
public Cmd_StopClanWar(id, level, cid) {
    if(!cmd_access(id, level, cid, 1)) return PLUGIN_HANDLED;

    new menu = menu_create("\r[ADMIN]\w Alege War-ul de oprit:", "StopWar_Handler");
    new count = 0;
    
    for(new i=0; i<MAX_WARS; i++) {
        if(g_bWarActive[i]) {
            static szItem[128], szNum[3];
            formatex(szItem, 127, "%s vs %s", g_szWarClan1[i], g_szWarClan2[i]);
            num_to_str(i, szNum, 2);
            menu_additem(menu, szItem, szNum);
            count++;
        }
    }
    
    if(count == 0) {
        ChatColor(id, "^4[WAR]^1 Nu exista niciun clan war activ in acest moment.");
        menu_destroy(menu);
        return PLUGIN_HANDLED;
    }
    
    menu_display(id, menu, 0);
    return PLUGIN_HANDLED;
}

public StopWar_Handler(id, menu, item) {
    if(item == MENU_EXIT) {
        menu_destroy(menu);
        return PLUGIN_HANDLED;
    }
    
    new szData[3], _a, _c;
    menu_item_getinfo(menu, item, _a, szData, 2, _, _, _c);
    new slot = str_to_num(szData);
    
    if(g_bWarActive[slot]) {
        g_bWarActive[slot] = false;
        remove_task(2000 + slot);
        
        new adminName[32];
        get_user_name(id, adminName, 31);
        ChatColor(0, "^4[WAR]^1 Adminul ^3%s^1 a oprit fortat war-ul dintre ^3%s^1 si ^3%s^1!", adminName, g_szWarClan1[slot], g_szWarClan2[slot]);
        ChatColor(0, "^4[WAR]^1 Miza de XP a ramas intacta pentru ambele clanuri.");
    }
    
    menu_destroy(menu);
    return PLUGIN_HANDLED;
}

clan_top.txt [actualizati cu cel din configs/]
Code:
<html>
<head>
<style type="text/css">
    body {
        background-color: #000000;
        font-family: Tahoma, Geneva, sans-serif;
        color: #FFFFFF;
        margin: 15px;
    }
    h2 { 
        color: #FF8C00; 
        text-align: center; 
        text-transform: uppercase;
        border-bottom: 1px solid #333;
        padding-bottom: 10px;
    }
    table { 
        width: 100%; 
        border-collapse: collapse; 
        margin-top: 10px;
        background-color: #111;
    }
    th { 
        background-color: #222; 
        color: #FFD700; 
        padding: 10px; 
        border: 1px solid #333;
        font-size: 14px;
    }
    td { 
        padding: 8px; 
        border: 1px solid #222; 
        text-align: center;
        font-size: 13px;
    }
    tr:nth-child(even) {
        background-color: #161616;
    }
    .footer {
        text-align: center;
        margin-top: 20px;
        font-size: 10px;
        color: #555;
    }
</style>
</head>
<body>
    <h2>Top 10 Clanuri - WTFCS</h2>
    <table>
        <thead>
            <tr>
                <th>Loc</th>
                <th>Nume Clan</th>
                <th>XP Colectat</th>
                <th>Victorii War</th>
                <th>Clan Level</th>
            </tr>
        </thead>
        <tbody>
            %CLAN_ROWS%
        </tbody>
    </table>
    <div class="footer">
        Clasamentul reflecta cele mai bune 10 clanuri din istoria serverului.
    </div>
</body>
</html>

clan_help.txt [actualizati cu cel din configs/]
Code:
<style>body{background:#000;color:#DDD;font-family:Tahoma;font-size:11px}h2{color:#F80;text-align:center;margin-top:0}h3{color:#FD0;margin:2px 0;border-bottom:1px dotted #555}ul{margin:0;padding-left:15px}.c{color:#0F0}.h{color:#F80}.b{background:#111;border:1px solid #333;padding:4px;margin-bottom:4px}</style>
<h2>Ajutor - Sistem Clanuri</h2>
<div class=b><h3>Comenzi Jucatori</h3>
<ul><li><b class=c>/clan</b>, <b class=c>/clans</b>, <b class=c>/clantop</b>, <b class=c>/myclanxp</b></li>
<li><b class=c>/c &lt;mesaj&gt;</b> - Chat privat clan</li></ul></div>
<div class=b><h3>Cum castigi XP?</h3>
<ul><li>Kill: <b class=h>+1</b> | HS/Bomba: <b class=h>+3</b> | Cutit: <b class=h>+5</b></li>
<li>Nu primesti XP daca iti omori colegii de clan!</li></ul></div>
<div class=b><h3>Clan Wars & Nivel</h3>
<ul><li>Minim <b class=h>Level 3 (1200 XP)</b> si <b class=h>5 online</b> pt a juca un War.</li>
<li>Durata 15 min. Castiga cine face mai multe kill-uri.</li>
<li>Miza: <b class=h>500 XP</b> (castigatorul ia 500, pierzatorul pierde 500).</li></ul></div>
<div class=b><h3>Comenzi Admini</h3>
<ul><li><b class=c>/createclan</b> (creare), <b class=c>/clandelete</b> (stergere)</li>
<li><b class=c>amx_stopclanwar</b> (in consola) - Opreste War fara pierderi</li></ul></div>

Bug vizual: daca e doar un clan, apare pe TOP inca unul mai jos, va trebui rezolvat
Sistemul de war pare functional, dar eu nu il pot testa pt ca nu am jucatori.
Aveti statistici despre jucatori individual etc.

Pe viitor: beneficii pt clanuri in functie de nivel, mici rezolvari de buguri.

!! Datele se salveaza, chiar daca puneti acesi plugin actualizat, clanurile raman neschimbate, atata timp cat nu stergeti datele despre clanuri din vault/

Astept pareri/buguri daca sunt si sugestii.

Statisticile despre kills etc. apar doar din cadrul warurilor asupra unui membru!
Actualizat si clan_help.txt

Si altele pe care probabil le-am uitat.

Video mic de prezentare:
 
shape1
shape2
shape3
shape4
shape5
shape6
Back
Top