Admin
Administrator
- Reg
- 28 Thg 10 2024
- Bài viết
- 302
- Điểm t.tác
- 7
- Điểm
- 18
-
bởi Admin
206 lượt xem.
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:
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.
Bước 4: Thêm dòng sau vào file ủy thác rời mạng:
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!
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!