Sari la conținut

Postări Recomandate

Postat

⚠️ WARN SYSTEM ⚠️


📌 Prezentare generală

Acest plugin permite administratorilor să acorde warn-uri jucătorilor pentru diverse abateri. La atingerea limitei de 3/3 warn-uri, jucătorul primește automat ban (implicit 30 zile).

Sistemul include notificări în chat, salvare permanentă în nVault și posibilitatea de resetare a warn-urilor. Inspirat din stilul SAMP.


🔗 Link descărcare: Nespecificat

👨‍💻 Creator: mihay111 & gemini

📦 Denumire plugin: warn_system.amxx


⚙️ Comenzi & Cvars

🛠️ Comenzi administrative:

  • amx_warn <nume> <motiv> – Acordă warn
  • amx_unwarn <nume> <număr> – Șterge warn-uri (1-3)

⚙️ Cvar:

  • amx_warn_bantime – Durata banului în minute
  • Default: 43200 (30 zile)
  • 0 = Ban permanent

🧩 Instrucțiuni instalare

Urmează pașii de mai jos fără skip-uri:

  1. Plasează fișierul warn_system.sma în:
    addons/amxmodx/scripting
  2. Compilează fișierul sau folosește direct warn_system.amxx
  3. Mută fișierul warn_system.amxx în:
    addons/amxmodx/plugins
  4. Deschide fișierul:
    addons/amxmodx/configs/plugins.ini
    și adaugă la final:
    warn_system.amxx
  5. Adaugă în amxmodx/configs/amxx.cfg:
    amx_warn_bantime 43200

📂 Cod sursă

#include <amxmodx>
#include <amxmisc>
#include <nvault>

#define MAX_WARNS 3

new g_iWarns[MAX_PLAYERS + 1];
new g_pBanTime;
new g_iVault;

public plugin_init() {
    register_plugin("Warn System", "1.1", "mihay111&gemini");
    
    // Comenzi pentru admini (acces ADMIN_KICK)
    register_concmd("amx_warn", "cmd_warn", ADMIN_KICK, "<nume/parte din nume> <motiv>");
    register_concmd("amx_unwarn", "cmd_unwarn", ADMIN_KICK, "<nume/parte din nume> <numar 1-3>");
    
    // Cvar-ul pentru durata banului in minute (43200 minute = 30 de zile)
    g_pBanTime = register_cvar("amx_warn_bantime", "43200");
    
    // Deschidem un vault pentru a salva warn-urile
    g_iVault = nvault_open("warn_system");
}

public plugin_end() {
    nvault_close(g_iVault);
}

// Incarcam warn-urile cand jucatorul intra pe server
public client_authorized(id) {
    LoadWarns(id);
}

// Curatam variabila cand iese de pe server
public client_disconnected(id) {
    g_iWarns[id] = 0;
}

// ================= COMANDA AMX_WARN =================
public cmd_warn(id, level, cid) {
    if (!cmd_access(id, level, cid, 3)) {
        console_print(id, "Utilizare: amx_warn <nume> <motiv>");
        return PLUGIN_HANDLED;
    }

    new szTarget[32], szReason[64];
    read_argv(1, szTarget, charsmax(szTarget));
    read_argv(2, szReason, charsmax(szReason));

    new target = cmd_target(id, szTarget, CMDTARGET_OBEY_IMMUNITY | CMDTARGET_ALLOW_SELF);
    if (!target) return PLUGIN_HANDLED;

    // Adaugam warn
    g_iWarns[target]++;
    SaveWarns(target);

    new szAdminName[32], szTargetName[32];
    get_user_name(id, szAdminName, charsmax(szAdminName));
    get_user_name(target, szTargetName, charsmax(szTargetName));

    // Mesaj pe tot chatul
    client_print_color(0, print_team_default, "^4[WARN]^1 Adminul ^3%s^1 i-a dat warn lui ^3%s^1. Motiv: ^4%s^1. Total warnuri: ^3%d/%d", szAdminName, szTargetName, szReason, g_iWarns[target], MAX_WARNS);

    // Mesaj strict catre cel vizat
    client_print_color(target, print_team_default, "^4[WARN]^1 Ai primit warn de la adminul ^3%s^1. Motiv: ^4%s^1. Total warnuri: ^3%d/%d.", szAdminName, szReason, g_iWarns[target], MAX_WARNS);
    client_print_color(target, print_team_default, "^4[WARN]^1 La %d warnuri vei primi ban!", MAX_WARNS);

    // Verificam daca a atins limita
    if (g_iWarns[target] >= MAX_WARNS) {
        new iBanTime = get_pcvar_num(g_pBanTime);
        new szBanDuration[32];

        // Formatam textul de ban
        if (iBanTime == 0) {
            copy(szBanDuration, charsmax(szBanDuration), "Permanent");
        } else if (iBanTime == 43200) {
            copy(szBanDuration, charsmax(szBanDuration), "30 de zile");
        } else {
            formatex(szBanDuration, charsmax(szBanDuration), "%d minute", iBanTime);
        }

        client_print_color(0, print_team_default, "^4[WARN]^1 Jucatorul ^3%s^1 a primit ^4%d/%d^1 warnuri si a fost banat ^3%s^1.", szTargetName, MAX_WARNS, MAX_WARNS, szBanDuration);

        // Resetam warn-urile pentru ca jucatorul "si-a platit datoria"
        g_iWarns[target] = 0;
        SaveWarns(target);

        // Dam ban efectiv prin SteamID
        new szAuthID[35];
        get_user_authid(target, szAuthID, charsmax(szAuthID));

        server_cmd("banid %d ^"%s^"; writeid", iBanTime, szAuthID);
        server_cmd("kickid %d ^"Ai primit 3/3 warn-uri! Ban: %s^"", get_user_userid(target), szBanDuration);
    }

    return PLUGIN_HANDLED;
}

// ================= COMANDA AMX_UNWARN =================
public cmd_unwarn(id, level, cid) {
    if (!cmd_access(id, level, cid, 3)) {
        console_print(id, "Utilizare: amx_unwarn <nume> <numar 1-3>");
        return PLUGIN_HANDLED;
    }

    new szTarget[32], szAmount[8];
    read_argv(1, szTarget, charsmax(szTarget));
    read_argv(2, szAmount, charsmax(szAmount));

    new target = cmd_target(id, szTarget, CMDTARGET_OBEY_IMMUNITY | CMDTARGET_ALLOW_SELF);
    if (!target) return PLUGIN_HANDLED;

    new iAmount = str_to_num(szAmount);
    
    // Validam numarul introdus
    if (iAmount < 1 || iAmount > 3) {
        console_print(id, "Eroare: Poti sterge intre 1 si 3 warn-uri odata.");
        return PLUGIN_HANDLED;
    }

    // Daca jucatorul are deja 0 warnuri
    if (g_iWarns[target] == 0) {
        console_print(id, "Jucatorul nu are niciun warn in acest moment.");
        return PLUGIN_HANDLED;
    }

    // Ne asiguram ca nu stergem mai multe warn-uri decat are
    if (iAmount > g_iWarns[target]) {
        iAmount = g_iWarns[target];
    }

    // Scadem warn-urile si salvam in baza de date nVault
    g_iWarns[target] -= iAmount;
    SaveWarns(target);

    new szAdminName[32], szTargetName[32];
    get_user_name(id, szAdminName, charsmax(szAdminName));
    get_user_name(target, szTargetName, charsmax(szTargetName));

    // Mesaj pe tot chatul
    client_print_color(0, print_team_default, "^4[WARN]^1 Adminul ^3%s^1 i-a sters ^4%d^1 warn(uri) lui ^3%s^1. Total warnuri: ^3%d/%d", szAdminName, iAmount, szTargetName, g_iWarns[target], MAX_WARNS);

    // Mesaj strict catre cel vizat
    client_print_color(target, print_team_default, "^4[WARN]^1 Adminul ^3%s^1 ti-a sters ^4%d^1 warn(uri). Total warnuri: ^3%d/%d.", szAdminName, iAmount, g_iWarns[target], MAX_WARNS);

    return PLUGIN_HANDLED;
}

// ================= SISTEM DE SALVARE =================
public LoadWarns(id) {
    new szAuthID[35];
    get_user_authid(id, szAuthID, charsmax(szAuthID));

    if(equal(szAuthID, "HLTV") || equal(szAuthID, "STEAM_ID_LAN") || equal(szAuthID, "VALVE_ID_LAN"))
        return;

    new szData[8];
    if (nvault_get(g_iVault, szAuthID, szData, charsmax(szData))) {
        g_iWarns[id] = str_to_num(szData);
    } else {
        g_iWarns[id] = 0;
    }
}

public SaveWarns(id) {
    new szAuthID[35];
    get_user_authid(id, szAuthID, charsmax(szAuthID));

    if(equal(szAuthID, "HLTV") || equal(szAuthID, "STEAM_ID_LAN") || equal(szAuthID, "VALVE_ID_LAN"))
        return;

    new szData[8];
    num_to_str(g_iWarns[id], szData, charsmax(szData));
    nvault_set(g_iVault, szAuthID, szData);
}

📌 Module necesare

  • CStrike
  • Fun


 

Vizitator
Acest topic este acum închis pentru alte răspunsuri.
  • Navigare recentă   0 membri

    • Nici un utilizator înregistrat nu vede această pagină.
×
×
  • Creează nouă...

Informații Importante

Termeni de Utilizare & Politică Intimitate