PDA

View Full Version : [JX] Script Cộng Dồn EXP Chuẩn



raymondle
20-09-12, 12:48 AM
Do script này mình dev cho PTTK, nay toàn bộ script bị share nên thôi share nốt luôn


-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-- Script cong don dev by Raymond Le
-- Ban quyen thuoc ve duy nhat PTTK.VN
-------------------------------------------------------------------------------------------------------------------------

function LoadDuLieu()
local exp_table = openfile("Settings/Player/level_exp.txt","r");
exp_data = read(exp_table,"*all")
local split_tab = split(exp_data,"\n")
exp_sl = getn(split_tab) - 1
level_exp = {}
level_exp_chinh = {}
for i=2,exp_sl do
level_exp=split(split_tab[i],"\t")
level_exp_chinh[i]=level_exp[2]
end;
closefile(exp_table)
return level_exp_chinh
end;

function AddExpDon(advance_exp)
--------------------------------------------
exp_hientai = GetExp() -- Diem exp hien dang user dang co
exp_lvl = {}
exp_lvl = LoadDuLieu()
exp_lvl1 = exp_lvl[GetLevel() + 1] -- lay exp trong table cua cap do do'

---Bien tam --------------------------------
exp_du = 0 -- EXP du de len cap
exp_thua = 0 -- EXP thua de cong don
--------------------------------------------
if (advance_exp <= (exp_lvl1 - exp_hientai)) then -- Thuc hien khi EXP hien tai lon hon EXP can them
ThemEXP(advance_exp)
else
--------------------------------------------
i = 1
exp_temp = 0
exp_temp2 = 0
exp_temp3 = 0
exp_temp4 = 0
--------------------------------------------
while (tonumber(exp_lvl[GetLevel() + i]) <= advance_exp) do
if exp_temp == 0 then
exp_temp = exp_lvl1 - exp_hientai -- Lay exp du de len cap tiep theo
exp_temp3 = exp_temp -- Set Temp cho exp exp du de len cap tiep theo
end
exp_temp = exp_temp + exp_lvl[GetLevel() + i + 1] -- EXP exp du de len cap tiep theo + EXP cap tiep theo
if exp_temp <= advance_exp then -- Neu exp temp nho? hon EXP muon them thi len 1 cap nua
i = i + 1
else
exp_temp2 = exp_temp - exp_lvl[GetLevel() + i + 1] -- Tra ve exp truoc neu exp lon hon exp can them
break
end
end
--------------------------------------------
if i > 1 then
for a=1,i do AddOwnExp(9999999999999) end
--------------------------------------------
exp_temp4 = advance_exp - exp_temp2
--------------------------------------------
AddOwnExp(exp_temp4)
--------------------------------------------
else
chuyentiep = 0
while (chuyentiep == 0) do
exp_du = exp_lvl1 - GetExp()
AddOwnExp(exp_du) -- Add EXP Du de len cap
exp_thua = advance_exp - exp_du
chuyentiep = 1
end;
AddOwnExp(exp_thua) -- Add EXP thua\ lai.
---------------------------------------
end;
Msg2Player("B¹n nhËn ®­îc "..advance_exp.." ®iÓm kinh nghiÖm!")
end;
end;

function ThemEXP(exp)
AddOwnExp(exp)
Msg2Player("B¹n nhËn ®­îc "..exp.." ®iÓm kinh nghiÖm!")
end

Chú ý script chỉ chạy nếu server của bạn có hỗ trợ hàm split của Lua. Dùng hàm AddExpDon(exp)

VongTinh
20-09-12, 02:11 AM
script này sẽ làm server khá lag :D

raymondle
20-09-12, 02:15 AM
script này sẽ làm server khá lag :D

Tại sao ? .

VongTinh
20-09-12, 02:19 AM
local exp_table = openfile("Settings/Player/level_exp.txt","r");
exp_data = read(exp_table,"*all")

mỗi lần add lại chạy lại cái này sẽ lag

raymondle
20-09-12, 10:08 AM
local exp_table = openfile("Settings/Player/level_exp.txt","r");
exp_data = read(exp_table,"*all")

mỗi lần add lại chạy lại cái này sẽ lag

Lua là một ngôn ngữ lập trình thế hệ thứ 3, bậc cao hơn Pascal. Do đó việc GS load 260 dòng và tách ra của GS diễn ra chưa tới 0.01s và ko load CPU quá 5 :)

vnpt1983
20-09-12, 11:34 AM
Lua là một ngôn ngữ lập trình thế hệ thứ 3, bậc cao hơn Pascal. Do đó việc GS load 260 dòng và tách ra của GS diễn ra chưa tới 0.01s và ko load CPU quá 5 :)

cái này hay,đang rất cần cái này. dùng mảng dữ liệu load có nhanh hơn load file đấy ko.

VongTinh
20-09-12, 11:37 AM
Lua là một ngôn ngữ lập trình thế hệ thứ 3, bậc cao hơn Pascal. Do đó việc GS load 260 dòng và tách ra của GS diễn ra chưa tới 0.01s và ko load CPU quá 5 :)

thử thêm vài số 0 nữa thì sao nhỉ ?

raymondle
20-09-12, 12:15 PM
thử thêm vài số 0 nữa thì sao nhỉ ?

Thêm số 0 gì bạn ? Max level chỉ có 250 tức ~250 dòng. split ra chưa tới 0.0005s . Việc tính toán diễn ra nhanh :) Vì chỉ là cộng trừ. Nếu GS của ông load CPU quá 5->10 tôi bái ông làm thầy.

VongTinh
21-09-12, 02:55 AM
vấn đề ko phải max level mà ở chỗ số lượng gamer sử dụng script đó $-)

KingMax
21-09-12, 11:28 PM
dùng 1 table , in các mảng đó ra , bỏ nằm trong file .lua , khi sử dụng , GS chỉ load 1 lần khi Khởi động trong RAM . Còn hàm này , GS sẽ load đi load lại khi nhiều nhân vật nhận hàm ... Tuy khả năng Lag không cao nhưng hiệu quả tối đa là cần thiết

phamngochai2
27-11-12, 03:58 PM
Script lỗi rồi, bỏ vào folder script, chỉnh đường dẫn đến file đó rồi dùng hàm AddExpDon(200000) thì gameserver báo lỗi "split" gì gì đó.Bạn fix dùm mình với. TKS

raymondle
10-01-13, 10:53 PM
Script lỗi rồi, bỏ vào folder script, chỉnh đường dẫn đến file đó rồi dùng hàm AddExpDon(200000) thì gameserver báo lỗi "split" gì gì đó.Bạn fix dùm mình với. TKS

Do server của bạn ko có hàm split!