PDA

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



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!

nguyenhuynhduc
23-04-16, 12:12 AM
TKS chủ thớt
30 tô tái nạm bò viên

bil4i3n
23-04-16, 05:00 AM
mình ghiền cái lệnh này ScriptProtocol:Echo("string")
thanks nhiều nhé :)

wermanhme1990
23-04-16, 06:44 AM
Cái script này chỉ là giải pháp tạm thời, các máy cùng ip không thể áp dụng cách này.

Sesshomaru
23-04-16, 10:36 AM
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

Nhìn bạn viết code đau mắt thật,mình ko hiểu tại sao lại dùng break trong hàm if ,break dùng để phá vòng lặp for thôi mà,cơ mà code này admin phải thêm ip bằng tay,rồi lại reload lại script,có vẻ chua

bil4i3n
23-04-16, 11:44 AM
Nhìn bạn viết code đau mắt thật,mình ko hiểu tại sao lại dùng break trong hàm if ,break dùng để phá vòng lặp for thôi mà,cơ mà code này admin phải thêm ip bằng tay,rồi lại reload lại script,có vẻ chua

Break để thoát khỏi While(1) nằm trong if là để check điều kiện để thoát thôi chứ không ra khỏi While đang true thì có mà treo máy chủ :D
nhưng mà code thêm ip bằng tay có mà chết :|
đoạn code này mục đích để online mà kiểm tra điều kiện không có trường hợp ngược lại, nếu không đúng phải chạy tới tổng lượng mem đang on cộng với lặp mảng IP kết hợp với Timer() thì hơi ớn nhỉ :D, à còn 1 mớ IncludeLib chả liên quan gì đến đoạn code này :|

rang_sut
23-04-16, 12:49 PM
mình ghiền cái lệnh này ScriptProtocol:Echo("string")
thanks nhiều nhé :)

Đây là lệnh j vậy bạn
chỉ mình cách dùng dc ko bạn

bil4i3n
23-04-16, 01:16 PM
Đây là lệnh j vậy bạn
chỉ mình cách dùng dc ko bạn

Cái này mình mới thấy trong đoạn code đó chứ mấy, mình qoute lại để đó khi nào rảnh tìm xem nó là cái gì :D, cả đoạn code có mỗi cái này là lạ mắt nhất chứ mấy :D

BMK
23-04-16, 01:21 PM
<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>

nguyenhuynhduc
23-04-16, 02:06 PM
Đã làm theo như chủ thớt mà s vẫn k giới han dc ta. Vào 7acc như thường. Ai team qa jup mình với =D>=D>:x:x

wermanhme1990
23-04-16, 02:07 PM
<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>

Mì tôm bạn thích thì chế nước ăn, không thích thì ăn sống, không nữa dã thật mịn rồi khuấy nước uống.

family2806
23-04-16, 04:16 PM
Như đã nói mình không có quá nhiều thời gian để chau chuốt code vì còn đang đi làm :)
Thứ mình share có thể chưa tốt nhất, chủ yếu cũng là ý tưởng và cách thực hiện với những bạn chưa biết.
Còn những ai biết rồi hoặc làm cách khác thứ mình share cũng chỉ là mùa rìu qua mắt thợ thôi mà :)

ztviet
23-04-16, 04:53 PM
Rất ...
nói chung ra chỉ share cái ý tưởng là đã quý rồi. Còn muốn ngon hơn . Xịn hơn thì phải bỏ tí sức. chứ cứ ăn mì tôm hoài sao mập được . đúng không bạn.

hoivegame
24-04-16, 12:05 AM
Ko xài nhưng thanks thớt đã share. Cái này code lâu oài mà ko xài, để minh rảnh minh tối ưu code cho.

nhaodzo
26-04-16, 05:26 PM
<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>
ko dùng nhưng cũng thanks bác vì tinh thần share bất diệt :D

family2806
26-04-16, 05:35 PM
<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>
ko dùng nhưng cũng thanks bác vì tinh thần share bất diệt :D
Đoạn đấy mình comment lại rồi mà.
Mình test thử lệnh đó nhưng không được :(
Nên đành phải dùng cách khác là cho Account đó ủy thác rời mạng sau đó KickOut :D

pengocdl
15-05-16, 11:55 PM
Có cách nào lách được cái giới hạn này không bạn.
Ai biết inb mình với mình đang chơi 1 võ lâm có giới hạn như này.
Cứ đăng nhập tới acc thứ 7 là bị "đang đăng nhập vào trò chơi"

keo_ngot1418
16-05-16, 01:53 AM
:Laluot_166::Laluot_166::Laluot_166::Laluot_166::L aluot_166::Laluot_166::Laluot_166::Laluot_166::Lal uot_166::Laluot_166:

hackervnk
17-12-16, 03:46 PM
family2806 có thể cho mình hỏi bước cuối là làm ntn không ạ , mình không hiểu chỗ này lắm :(

gamevn500
28-07-17, 09:03 AM
Khi tạo nhân vật mới, vào game thì tính số acc đã đăng nhập, khi lên cấp, thoát game ra vào lại thì không tính acc đã đăng nhập, làm sao để khi tạo nhân vật, lên cấp,... tất cả đều thoát ra vào lại thì đều tính đã đăng nhập, ai biết giúp với

bachvanphi
24-12-17, 11:47 AM
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!



Can tim mua gioi han acc, ai co ban lai gia sinh voi a, thanks

bachvanphi
25-12-17, 11:52 AM
Mở sv online thì liên hệ mấy a kỹ thuật họ làm free cho , mua chi cho tốn tiền rồi bị người bán cài thông tin vào như kiểu đi qc sv cho ngta

Giới hạn ip thì làm đc rồi mà gặp trực trặc lớn.
Ví dụ: Có 2 anh em nhà nọ, cùng chơi game võ lâm và nếu giới hạn theo ip thì mỗi ae chỉ vào đc 5-5
-5.
Cần tìm mua giới hạn theo 10 acc /pc.
Ai có share lại giá sinh viên đi ạ.
Cảm ơn nhiều 😍😍😍