family2806
22-04-16, 11:27 PM
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:
IncludeLib("SETTING")IncludeLib("RELAYLADDER")IncludeLib("TIMER")IncludeLib("PARTNER")Include("\\script\\dailogsys\\dailogsay.lua")Include("\\script\\activitysys\\functionlib.lua")Include("\\script\\global\\volamht\\config.lua")
MAX_PLAYER_ON_IP = 6
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,},}
function CheckYourIP(YourIPAddress) local OldPlayerIndex = PlayerIndex local TotalPlayer = GetPlayerCount() local count = 0 local tmpPlayerIndex = 1 local success = 0 local tmpIPAddress local tmp_max_ip = MAX_PLAYER_ON_IP local YourFaction = GetFaction() while (1) do PlayerIndex = tmpPlayerIndex if(GetName() ~= "") then if (GetTask(TASK_TEMP_ONLINE) == 202) then --Msg2SubWorld(GetName().." So Sanh ".. GetIP()) tmpIPAddress = lib:Split(GetIP(),":")[1] if (tmpIPAddress ==YourIPAddress) then count = count + 1 for i = 1, getn(LIST_IP) do --Msg2Player(YourIPAddress.." "..LIST_IP[i][1]) if YourIPAddress == LIST_IP[i][1] then if(YourFaction == "tianren" and count > LIST_IP[i][3]) then OfflineLive(PlayerIndex) KickOutAccount(GetAccount()) end --Msg2Player(LIST_IP[i][2]) tmp_max_ip = LIST_IP[i][2] break end end if (count > tmp_max_ip) then PlayerIndex = OldPlayerIndex --Msg2Player("IP cña b¹n ®· ®¨ng nhËp "..tmp_max_ip.." Account råi. B¹n sÏ bÞ kick khái server. Vui lßng liªn hÖ Admin ®Ó ®îc hç trî. Tr©n Träng!") --ScriptProtocol:Echo("/ExitGame") OfflineLive(PlayerIndex) KickOutAccount(GetAccount()) --ExitGame() break end end end success = success + 1 end if(success == TotalPlayer) then break end tmpPlayerIndex = tmpPlayerIndex + 1 end PlayerIndex = OldPlayerIndex 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
function OnTimer() local YourIPAddress = lib:Split(GetIP(),":")[1] --Msg2Player("<color=green>TiÕn hµnh x¸c thùc IP. IP Cña b¹n lµ <color>"..YourIPAddress) Msg2Player("<color=green>TiÕn hµnh x¸c thùc IP. <color>") CheckYourIP(YourIPAddress) StopTimer()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.
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:
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!
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:
IncludeLib("SETTING")IncludeLib("RELAYLADDER")IncludeLib("TIMER")IncludeLib("PARTNER")Include("\\script\\dailogsys\\dailogsay.lua")Include("\\script\\activitysys\\functionlib.lua")Include("\\script\\global\\volamht\\config.lua")
MAX_PLAYER_ON_IP = 6
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,},}
function CheckYourIP(YourIPAddress) local OldPlayerIndex = PlayerIndex local TotalPlayer = GetPlayerCount() local count = 0 local tmpPlayerIndex = 1 local success = 0 local tmpIPAddress local tmp_max_ip = MAX_PLAYER_ON_IP local YourFaction = GetFaction() while (1) do PlayerIndex = tmpPlayerIndex if(GetName() ~= "") then if (GetTask(TASK_TEMP_ONLINE) == 202) then --Msg2SubWorld(GetName().." So Sanh ".. GetIP()) tmpIPAddress = lib:Split(GetIP(),":")[1] if (tmpIPAddress ==YourIPAddress) then count = count + 1 for i = 1, getn(LIST_IP) do --Msg2Player(YourIPAddress.." "..LIST_IP[i][1]) if YourIPAddress == LIST_IP[i][1] then if(YourFaction == "tianren" and count > LIST_IP[i][3]) then OfflineLive(PlayerIndex) KickOutAccount(GetAccount()) end --Msg2Player(LIST_IP[i][2]) tmp_max_ip = LIST_IP[i][2] break end end if (count > tmp_max_ip) then PlayerIndex = OldPlayerIndex --Msg2Player("IP cña b¹n ®· ®¨ng nhËp "..tmp_max_ip.." Account råi. B¹n sÏ bÞ kick khái server. Vui lßng liªn hÖ Admin ®Ó ®îc hç trî. Tr©n Träng!") --ScriptProtocol:Echo("/ExitGame") OfflineLive(PlayerIndex) KickOutAccount(GetAccount()) --ExitGame() break end end end success = success + 1 end if(success == TotalPlayer) then break end tmpPlayerIndex = tmpPlayerIndex + 1 end PlayerIndex = OldPlayerIndex 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
function OnTimer() local YourIPAddress = lib:Split(GetIP(),":")[1] --Msg2Player("<color=green>TiÕn hµnh x¸c thùc IP. IP Cña b¹n lµ <color>"..YourIPAddress) Msg2Player("<color=green>TiÕn hµnh x¸c thùc IP. <color>") CheckYourIP(YourIPAddress) StopTimer()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.
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:
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!