لوحة التحكم

آخر عمليات التحقق
المنتجIPالحالةالوقت

المنتجات

UUIDالاسمالوصفالتراخيصالتاريخإجراءات

التراخيص

المفتاحالمنتجالعميلDiscordIPsالصلاحيةالحالةإجراءات

المستخدمين

المستخدمالدورDiscordالتاريخإجراءات

أداة حماية السكربتات

تحليل ذكي للملفات
اسحب ملف ZIP هنا أو اضغط للاختيار
يجب أن يحتوي على fxmanifest.lua

الأكواد

أكواد الربط اليدوي مع نظام الرخص — الملف الأساسي + الملف الإضافي

API Endpoint

يمكنك استخدام الـ API مباشرة من أي لغة برمجة

POST https://teamn6l.com/api/verify
Content-Type: application/json

{
  "uuid": "product-uuid-here",
  "key":  "N6L-XXXXX-XXXXX-XXXXX-XXXXX"
}

// الرد في حالة النجاح:
{ "status": "valid", "message": "License verified — Product Name" }

// الرد في حالة الفشل:
{ "status": "invalid", "message": "سبب الرفض..." }

// أكواد الحالة:
// 200 = ترخيص صالح
// 400 = بيانات ناقصة
// 403 = ترخيص معطل / IP مرفوض / منتهي
// 404 = منتج أو ترخيص غير موجود
// 429 = طلبات كثيرة (rate limit)

FiveM Lua

سيرفر — الملف الأساسي

ضع هذا الكود في أول ملف سيرفر (server_script). يتحقق من الرخصة وينشئ توكن مشفّر بـ DJB2+FNV ويحطه في GlobalState

-- TEAM N6L License Protection (Server Main)
-- ضع هذا في أول ملف سيرفر فقط

(function()
    local N6L_UUID      = "ضع-UUID-المنتج-هنا"
    local N6L_KEY       = "N6L-XXXXX-XXXXX-XXXXX-XXXXX"
    local TOKEN_SECRET  = "REPLACE_WITH_A_RANDOM_SECRET"
    local STATE_KEY     = "n6l_tk_XXXXX" -- غير XXXXX لاسم فريد

    local function generateToken(secret)
        local ts  = tostring(os.time())
        local raw = secret .. ":" .. ts
        local h   = 5381
        for i = 1, #raw do h = ((h * 33) ~ string.byte(raw, i)) & 0x7FFFFFFF end
        local h2  = 0x811c9dc5
        for i = #raw, 1, -1 do h2 = ((h2 ~ string.byte(raw, i)) * 0x01000193) & 0xFFFFFFFF end
        return string.format("%08x%08x%s", h, h2, ts)
    end

    local _stop = function()
        print("^1[TEAM N6L] License Validation Failed^0")
        StopResource(GetCurrentResourceName())
    end

    PerformHttpRequest("https://teamn6l.com/api/verify", function(sc, rt)
        local ok, res = pcall(json.decode, rt)
        if sc == 200 and ok and res and res.status == "valid" then
            local token = generateToken(TOKEN_SECRET)
            GlobalState[STATE_KEY] = token
            print("^2[TEAM N6L] " .. (res.message or "License OK") .. "^0")

            -- ══════════════════════════════════════
            -- ضع كودك الأصلي هنا (داخل التحقق الناجح)
            -- ══════════════════════════════════════

        else
            local msg = ok and res and res.message or "Verification Failed"
            print("^1[TEAM N6L] " .. msg .. "^0")
            _stop()
        end
    end, "POST", json.encode({
        uuid = N6L_UUID,
        key  = N6L_KEY
    }), {["Content-Type"] = "application/json"})
end)()
سيرفر — ملف إضافي

ضع هذا الكود في أي ملف سيرفر ثاني. يقرأ التوكن من GlobalState ويتحقق منه بالهاش — إذا ما تطابق يوقف الريسورس

-- TEAM N6L Token Guard (Server Extra)
-- ضع هذا في أعلى أي ملف سيرفر إضافي

Citizen.CreateThread(function()

    local TOKEN_SECRET = "REPLACE_WITH_A_RANDOM_SECRET" -- نفس السيكرت
    local STATE_KEY    = "n6l_tk_XXXXX"                 -- نفس المفتاح

    local function verifyToken(token)
        if type(token) ~= "string" or #token < 18 then return false end
        local ts_str = token:sub(17)
        if not tonumber(ts_str) then return false end
        local raw = TOKEN_SECRET .. ":" .. ts_str
        local h   = 5381
        for i = 1, #raw do h  = ((h  * 33) ~ string.byte(raw, i)) & 0x7FFFFFFF end
        local h2  = 0x811c9dc5
        for i = #raw, 1, -1 do h2 = ((h2 ~ string.byte(raw, i)) * 0x01000193) & 0xFFFFFFFF end
        return token == string.format("%08x%08x%s", h, h2, ts_str)
    end

    local deadline = GetGameTimer() + 15000
    repeat Citizen.Wait(200) until verifyToken(GlobalState[STATE_KEY])
                               or  GetGameTimer() > deadline

    if not verifyToken(GlobalState[STATE_KEY]) then
        print("^1[TEAM N6L] Server token verification failed^0")
        StopResource(GetCurrentResourceName())
        return
    end

    -- ضع كودك هنا

end)
كلاينت

ضع هذا الكود في أي ملف كلاينت (client_script). يقرأ التوكن من GlobalState ويتحقق — نفس طريقة الملف الإضافي

-- TEAM N6L Token Guard (Client)
-- ضع هذا في أعلى أي ملف كلاينت

Citizen.CreateThread(function()

    local TOKEN_SECRET = "REPLACE_WITH_A_RANDOM_SECRET" -- نفس السيكرت
    local STATE_KEY    = "n6l_tk_XXXXX"                 -- نفس المفتاح

    local function verifyToken(token)
        if type(token) ~= "string" or #token < 18 then return false end
        local ts_str = token:sub(17)
        if not tonumber(ts_str) then return false end
        local raw = TOKEN_SECRET .. ":" .. ts_str
        local h   = 5381
        for i = 1, #raw do h  = ((h  * 33) ~ string.byte(raw, i)) & 0x7FFFFFFF end
        local h2  = 0x811c9dc5
        for i = #raw, 1, -1 do h2 = ((h2 ~ string.byte(raw, i)) * 0x01000193) & 0xFFFFFFFF end
        return token == string.format("%08x%08x%s", h, h2, ts_str)
    end

    local deadline = GetGameTimer() + 15000
    repeat Citizen.Wait(200) until verifyToken(GlobalState[STATE_KEY])
                               or  GetGameTimer() > deadline

    if not verifyToken(GlobalState[STATE_KEY]) then
        print("^1[TEAM N6L] Client token verification failed^0")
        StopResource(GetCurrentResourceName())
        return
    end

    -- ضع كودك هنا

end)

JavaScript / Node.js

الملف الأساسي

ضع هذا في الملف الرئيسي. يتحقق من الرخصة وينشئ توكن مشفّر ويخزنه عشان باقي الملفات تتحقق منه

// TEAM N6L License Protection (Main File)
const N6L_UUID     = "product-uuid-here";
const N6L_KEY      = "N6L-XXXXX-XXXXX-XXXXX-XXXXX";
const TOKEN_SECRET = "REPLACE_WITH_A_RANDOM_SECRET";

function generateToken(secret) {
    const ts  = Date.now().toString();
    const raw = secret + ":" + ts;
    let h = 5381;
    for (let i = 0; i < raw.length; i++)
        h = ((h * 33) ^ raw.charCodeAt(i)) & 0x7FFFFFFF;
    let h2 = 0x811c9dc5;
    for (let i = raw.length - 1; i >= 0; i--)
        h2 = Math.imul(h2 ^ raw.charCodeAt(i), 0x01000193) >>> 0;
    return h.toString(16).padStart(8, "0")
         + (h2 >>> 0).toString(16).padStart(8, "0") + ts;
}

let _n6lToken = null;

async function n6lInit() {
    const res = await fetch("https://teamn6l.com/api/verify", {
        method: "POST",
        headers: { "Content-Type": "application/json" },
        body: JSON.stringify({ uuid: N6L_UUID, key: N6L_KEY })
    });
    const data = await res.json();
    if (data.status === "valid") {
        _n6lToken = generateToken(TOKEN_SECRET);
        console.log("[TEAM N6L] License OK:", data.message);

        // ══════════════════════════════════════
        // ضع كودك الأصلي هنا (داخل التحقق الناجح)
        // ══════════════════════════════════════

    } else {
        console.error("[TEAM N6L] License Failed:", data.message);
        process.exit(1);
    }
}

function n6lGetToken() { return _n6lToken; }
module.exports = { n6lInit, n6lGetToken, TOKEN_SECRET };

n6lInit();
ملف إضافي

ضع هذا في أي ملف ثاني. يستورد التوكن من الملف الأساسي ويتحقق منه بالهاش قبل ما يشتغل

// TEAM N6L Token Guard (Extra File)
const { n6lGetToken, TOKEN_SECRET } = require("./n6l_main");

function verifyToken(token, secret) {
    if (typeof token !== "string" || token.length < 18) return false;
    const ts = token.substring(16);
    if (isNaN(Number(ts))) return false;
    const raw = secret + ":" + ts;
    let h = 5381;
    for (let i = 0; i < raw.length; i++)
        h = ((h * 33) ^ raw.charCodeAt(i)) & 0x7FFFFFFF;
    let h2 = 0x811c9dc5;
    for (let i = raw.length - 1; i >= 0; i--)
        h2 = Math.imul(h2 ^ raw.charCodeAt(i), 0x01000193) >>> 0;
    return token === h.toString(16).padStart(8, "0")
                    + (h2 >>> 0).toString(16).padStart(8, "0") + ts;
}

async function n6lGuard(retries = 30) {
    for (let i = 0; i < retries; i++) {
        const tk = n6lGetToken();
        if (tk && verifyToken(tk, TOKEN_SECRET)) return;
        await new Promise(r => setTimeout(r, 500));
    }
    console.error("[TEAM N6L] Token verification failed");
    process.exit(1);
}

(async () => {
    await n6lGuard();
    // ضع كودك هنا
})();

Python

الملف الأساسي

ضع هذا في الملف الرئيسي. يتحقق من الرخصة وينشئ توكن مشفّر ويخزنه

# TEAM N6L License Protection (Main File)
import requests, time

N6L_UUID     = "product-uuid-here"
N6L_KEY      = "N6L-XXXXX-XXXXX-XXXXX-XXXXX"
TOKEN_SECRET = "REPLACE_WITH_A_RANDOM_SECRET"

def generate_token(secret):
    ts  = str(int(time.time()))
    raw = secret + ":" + ts
    h = 5381
    for c in raw:
        h = ((h * 33) ^ ord(c)) & 0x7FFFFFFF
    h2 = 0x811c9dc5
    for c in reversed(raw):
        h2 = ((h2 ^ ord(c)) * 0x01000193) & 0xFFFFFFFF
    return f"{h:08x}{h2:08x}{ts}"

_n6l_token = None

def n6l_init():
    global _n6l_token
    res = requests.post("https://teamn6l.com/api/verify", json={
        "uuid": N6L_UUID, "key": N6L_KEY
    })
    data = res.json()
    if data["status"] == "valid":
        _n6l_token = generate_token(TOKEN_SECRET)
        print(f"[TEAM N6L] License OK: {data['message']}")

        # ══════════════════════════════════════
        # ضع كودك الأصلي هنا (داخل التحقق الناجح)
        # ══════════════════════════════════════

    else:
        print(f"[TEAM N6L] License Failed: {data['message']}")
        exit(1)

def n6l_get_token():
    return _n6l_token

n6l_init()
ملف إضافي

ضع هذا في أي ملف ثاني. يستورد التوكن ويتحقق منه بالهاش

# TEAM N6L Token Guard (Extra File)
import time
from n6l_main import n6l_get_token, TOKEN_SECRET

def verify_token(token, secret):
    if not isinstance(token, str) or len(token) < 18:
        return False
    ts = token[16:]
    if not ts.isdigit():
        return False
    raw = secret + ":" + ts
    h = 5381
    for c in raw:
        h = ((h * 33) ^ ord(c)) & 0x7FFFFFFF
    h2 = 0x811c9dc5
    for c in reversed(raw):
        h2 = ((h2 ^ ord(c)) * 0x01000193) & 0xFFFFFFFF
    return token == f"{h:08x}{h2:08x}{ts}"

def n6l_guard(retries=30):
    for _ in range(retries):
        tk = n6l_get_token()
        if tk and verify_token(tk, TOKEN_SECRET):
            return
        time.sleep(0.5)
    print("[TEAM N6L] Token verification failed")
    exit(1)

n6l_guard()

# ضع كودك هنا

سجل التحقق

#المنتجIPالحالةالرسالةالوقت

الإعدادات

Discord Webhook
إشعار عند التحقق الناجح
إشعار عند فشل التحقق
Discord Bot

شغّل البوت بالأمر: node bot.js

هذي الصور تطلع بلوحة الرخص لما تكتب /setup بالديسكورد

كم يوم العميل لازم ينتظر بين كل تغيير آيبي من الديسكورد (0 = بدون مهلة)

صلاحية الدخول (Discord Role)

فقط أعضاء Discord اللي عندهم هالرتبة يقدرون يدخلون. اتركه فاضي = الكل يقدر يدخل.

API Endpoint

POST /api/verify

{
  "uuid": "product-uuid-here",
  "key": "N6L-XXXXX-XXXXX-XXXXX-XXXXX"
}