Share Script Giới Hạn Số Account / IP, có thể tùy biến giới hạn thêm nhiều thứ

Admin

Administrator
Reg
28 Thg 10 2024
Bài viết
302
Điểm t.tác
7
Điểm
18
Trước khi đọc bài của mình bạn nên hiểu giới hạn theo IP là gì.
Giới hạn theo IP là giới hạn theo địa chỉ IP public (có thể vào canyouseeme.org để xem địa chỉ ip public máy tính của bạn).
Có 2 cách để làm, 1 là dùng iptables (cách này cũng tốt nhưng nó thuộc phạm trù quản trị mạng nên mình không nhắc đến), 2 là dùng script như mình share.
Mình tham gia cộng đồng jx chưa được bao lâu, do là người đang đi làm nên thời gian mình dành cho jx cũng không được quá nhiều. Nên kiến thức còn hạn hẹp.
Script này mình tự mày mò và code. Có gì mọi người cùng cho ý kiến.
Lợi ích:
- Giới hạn được số account / IP.
- Nếu đăng nhập quá số account sẽ tự động quay trở lại màn hình đăng nhập.
- Có thể giới hạn theo ý tưởng. VD như mỗi IP không được đăng nhập quá 2 acc thiên nhẫn, ...
- Có thể mở giờ không giới hạn như công thành, tống kim, ...
- Nói chung mọi ý tưởng giới hạn đều có thể thực hiện được
Hạn chế:
Chỉ giới hạn được theo IP chứ không phải giới hạn theo PC.

Cách làm như sau:

Bước 1: tạo 1 file hancheip.lua có nội dung như sau:
Code:
-- Import các thư viện cần thiết
IncludeLib("SETTING")
IncludeLib("RELAYLADDER")
IncludeLib("TIMER")
IncludeLib("PARTNER")
Include("\\script\\dailogsys\\dailogsay.lua")
Include("\\script\\activitysys\\functionlib.lua")
Include("\\script\\global\\volamht\\config.lua")

-- Cấu hình số lượng tài khoản tối đa trên mỗi IP
MAX_PLAYER_ON_IP = 6

-- Danh sách các IP đặc biệt với số lượng tài khoản cho phép
-- Mỗi dòng gồm: {"Địa chỉ IP", Số tài khoản tối đa, Giới hạn riêng cho faction "tianren"}
LIST_IP = {
    {"113.190.208.192", 12, 2},
    {"113.23.53.21", 12, 2},
    {"118.70.178.121", 12, 2},
    {"14.177.254.170", 12, 2},
    {"14.167.238.90", 10, 2},
    {"14.164.25.194", 8, 2},
    {"14.169.90.17", 12, 2},
    {"14.176.122.185", 10, 2},
    {"123.28.158.92", 8, 2},
    {"1.54.213.213", 10, 2},
    {"113.188.136.104", 10, 2},
    {"117.5.22.230", 8, 2},
    {"42.112.235.4", 12, 2},
}

-- Hàm kiểm tra số lượng tài khoản đăng nhập từ một IP
function CheckYourIP(YourIPAddress)
    local OldPlayerIndex = PlayerIndex -- Lưu lại chỉ số người chơi hiện tại
    local TotalPlayer = GetPlayerCount() -- Tổng số người chơi hiện tại
    local count = 0 -- Biến đếm số lượng tài khoản đăng nhập từ IP này
    local tmpPlayerIndex = 1
    local success = 0
    local tmpIPAddress
    local tmp_max_ip = MAX_PLAYER_ON_IP -- Giới hạn mặc định
    local YourFaction = GetFaction() -- Lấy faction của người chơi

    while (1) do
        PlayerIndex = tmpPlayerIndex -- Kiểm tra từng người chơi

        if (GetName() ~= "") then -- Nếu người chơi có tên (tức là đang online)
            if (GetTask(TASK_TEMP_ONLINE) == 202) then -- Kiểm tra trạng thái online
                tmpIPAddress = lib:Split(GetIP(), ":")[1] -- Lấy địa chỉ IP của người chơi

                if (tmpIPAddress == YourIPAddress) then -- Nếu IP trùng khớp
                    count = count + 1 -- Tăng biến đếm số tài khoản từ IP này

                    -- Kiểm tra danh sách IP đặc biệt
                    for i = 1, getn(LIST_IP) do
                        if YourIPAddress == LIST_IP[1] then
                            -- Nếu người chơi thuộc faction "tianren" và vượt giới hạn riêng, kick khỏi server
                            if (YourFaction == "tianren" and count > LIST_IP[3]) then
                                OfflineLive(PlayerIndex) -- Ngắt kết nối nhân vật
                                KickOutAccount(GetAccount()) -- Kick tài khoản ra khỏi game
                            end
                            tmp_max_ip = LIST_IP[2] -- Cập nhật giới hạn tài khoản cho phép từ danh sách
                            break
                        end
                    end

                    -- Nếu vượt quá số lượng tài khoản tối đa cho phép trên IP
                    if (count > tmp_max_ip) then
                        PlayerIndex = OldPlayerIndex -- Khôi phục lại chỉ số người chơi ban đầu
                        OfflineLive(PlayerIndex) -- Ngắt kết nối nhân vật
                        KickOutAccount(GetAccount()) -- Kick tài khoản ra khỏi game
                        break
                    end
                end
            end
            success = success + 1 -- Đếm số người chơi đã kiểm tra
        end

        if (success == TotalPlayer) then -- Nếu đã kiểm tra hết danh sách người chơi thì dừng vòng lặp
            break
        end

        tmpPlayerIndex = tmpPlayerIndex + 1 -- Chuyển sang người chơi tiếp theo
    end

    -- Khôi phục lại chỉ số người chơi ban đầu
    PlayerIndex = OldPlayerIndex

    -- Gửi thông báo đến người chơi về số lượng tài khoản đã đăng nhập từ IP
    Msg2Player(
        "<color=green>Xác thực IP thành công! IP của bạn hiện đã đăng nhập "
        .. count .. " Account.<enter>Mỗi IP được phép đăng nhập tối đa "
        .. tmp_max_ip .. " Account.<color>"
    )
end

-- Hàm thực thi kiểm tra IP khi chạy timer
function OnTimer()
    local YourIPAddress = lib:Split(GetIP(), ":")[1] -- Lấy địa chỉ IP của người chơi
    Msg2Player("<color=green>Tiến hành xác thực IP.<color>") -- Gửi thông báo xác thực IP
    CheckYourIP(YourIPAddress) -- Gọi hàm kiểm tra IP
    StopTimer() -- Dừng timer
end


Bước 2: Khai báo task tại setting - > timertask.txt
VD: 116 \script\global\volamht\hancheip.lua
Bước 3: thêm 2 dòng này vào file script -> global -> login.lua.

Code:
SetTask(TASK_TEMP_ONLINE, 202)SetTimer( 18 * 1, 116)


Bước 4: Thêm dòng sau vào file ủy thác rời mạng:

Code:
SetTask(TASK_TEMP_ONLINE, 0)
trước dòng sauOfflineLive(PlayerIndex)

Bước 5: tạo file config khai báo biến: TASK_TEMP_ONLINE = 3013 (hoặc bạn có thể tìm chỗ nào mình dùng biến này thay bằng số 3013)

Code mình share có sẵn phần các IP trong list được vượt quá 6 acc / IP, nhưng đổi lại không được đăng nhập quá 2 acc thiên nhẫn.

Done!
 

Admin

Administrator
Reg
28 Thg 10 2024
Bài viết
302
Điểm t.tác
7
Điểm
18
Cách trên cũng có nhược điểm, nếu người dùng thật dùng chùng wifi, mạng, hoặc quán nét thì bị giới hạn.
Nếu bạn chỉ dựa vào IP để giới hạn số lượng tài khoản đăng nhập, thì các quán net hoặc hộ gia đình dùng chung mạng sẽ gặp bất tiện. Một số người có thể bị chặn dù họ là người chơi hợp lệ, trong khi những người dùng VPN hoặc đổi IP có thể lách luật.

Giải pháp: Hạn chế theo PC (HWID - Hardware ID)

Thay vì giới hạn theo IP, bạn có thể kiểm soát số lượng tài khoản đăng nhập theo từng máy tính dựa trên HWID (Hardware ID) hoặc MAC Address.

Cách thực hiện

  1. Lấy HWID hoặc MAC Address
    • Một số game có thể lấy thông tin phần cứng như CPU ID, HDD Serial, hoặc MAC Address của máy người chơi.
    • Nếu JX hỗ trợ, bạn có thể lấy HWID bằng một hàm nội bộ hoặc từ hệ thống.
  2. Lưu HWID khi đăng nhập
    • Mỗi lần người chơi đăng nhập, kiểm tra HWID của họ trong danh sách đã lưu.
    • Nếu số lượng tài khoản trên một HWID vượt quá giới hạn (VD: 3 tài khoản), thì tự động kick người chơi.
  3. Cách lưu trữ HWID
    • Bạn có thể lưu HWID vào database hoặc một file tạm thời để kiểm tra.
  4. cách khác như lấy MAC Address hoặc Serial Number HDD.
 
Bên trên
AdBlock Detected

We get it, advertisements are annoying!

Sure, ad-blocking software does a great job at blocking ads, but it also blocks useful features of our website. For the best site experience please disable your AdBlocker.

I've Disabled AdBlock    No Thanks