PDA

View Full Version : Dùng mảng để viết code LUA !



thaihoa91
22-12-10, 06:45 PM
Có lẽ nếu ai từng viết code, chắc hẳn sẽ bít dùng mảng, mình thì ko dám gọi là ng` nghĩ ra ý tưởng dùng mảng đầu tiên vào code LUA, chỉ là giới thiệu cho những ai chưa bít cách dùng mảng thui :D để khi viết code dễ nhìn 1 chút :D

Thay vì ta viết 1 đoạn code sau:


--Author: thaihoa91

function main()
Say("<bclr=red><color=yellow>Ngo Than y<color><bclr>: Bon tiem deu la than duoc! Co benh se khoi benh, khong benh se khoe, gia ca phai chang. Mua mot it chu?",3,"Giao dich/giaodich","Ta den nhan nhiem vu So nhap/nvsonhapngothany","Khong giao dich/kogiaodich")
end;

function giaodich()
Sale(39);
end;

function nvsonhapngothany()
Talk(1,"","Luc bi thuong nho uong thuoc, phong benh hon chua benh.")
end;

function kogiaodich()
end;

Thì ta có thể viết lại thế này cho dễ nhìn:


--Author: thaihoa91

MacDinhNgoThanY = {
{"<bclr=red><color=yellow>Ngo Than y<color><bclr>: Bon tiem deu la than duoc! Co benh se khoi benh, khong benh se khoe, gia ca phai chang. Mua mot it chu?"},
{"Giao dich/giaodich"},
{"Ta den nhan nhiem vu So nhap/nvsonhapngothany"},
{"Khong giao dich/kogiaodich"}
}

function main()
Say(MacDinhNgoThanY[1][1],3,MacDinhNgoThanY[2][1],MacDinhNgoThanY[3][1],MacDinhNgoThanY[4][1])
end;

function giaodich()
Sale(39);
end;

function nvsonhapngothany()
Talk(1,"","Luc bi thuong nho uong thuoc, phong benh hon chua benh.")
end;

function kogiaodich()
end;

Các loại code thế này, mình đang dev cho Server Tiếu Ngạo và mình quyết định tự code lại toàn bộ file LUA theo ý mình :D

Vì khi mình tự viết ra thì mình sẽ tự nhớ dc cấu trúc mình đã viết, nhớ dc ID task đã dùng ID nào rùi ! Chứ dùng của ng` khác thì test rùi sửa lại theo ý mình còn lâu hơn là viết lại :))

kenshiwo
23-12-10, 08:32 AM
Nếu đoán không nhầm thì có 1 files .LUA có để lại tóm tắt của các Task đang được sử dụng... không nhớ rõ trong file nào, mà coder chuyên nghiệp chắc có để lại, còn Server moi móc làm lại thì không biết có hay không (:| mà cách viết thế này nhìn sơ sơ giống cách viết trong Script Vinagame, hơi dài dòng....

thaihoa91
23-12-10, 08:40 AM
Mình lấy ý tưởng này từ code map_index.lua (file xa phu làm quest Dã Tẩu) của VNG đó ;)) Hàng này tui share trong bài tọa độ move maps full :))

Nó ko dài dòng đâu ! Ứng dụng nó rất nhìu, có thể làm cho chuyển sinh, tẩy tủy, hay add quái SLL dễ dàng :D

kenshiwo
23-12-10, 08:46 AM
Tiếp tục phát huy nhé bạn hiền, Server Online cũng có khi có lỗi khi Script dùng mảng quá nhiều đó... Chỉ ứng dụng được cho vài chức năng thôi.. Nhưng cũng là 1 ý kiến hay để học hỏi và phát huy thêm nhiều cách viết...

khoamamktvn
23-12-10, 10:01 AM
Cách viết hay đó.
Phát triển tốt nhé:)

kenshiwo
23-12-10, 11:15 AM
--Author: KenShiWo
--Title: Doi Xu

DOIXU = {
{"Ngang hang chuyen tien <color=yellow>Van<color> thanh <color=fire>Xu<color>Cac ha hien tai co <color=fire>"..GetTask(66).." Xu"},
{"Ta muon doi Xu/exchange"},
{"Ghe ngang/out"}
}

SELXU = {
{"<color=blue>Cac ha muon doi bao nhieu Xu <color>"},
{"1 Xu = 500v/ex1xu"},
{"2 Xu = 1000v/ex2xu"},
{"5 Xu = 2500v/ex5xu"},
{"10 Xu = 5000v/ex10xu"},
{"Khong muon/out"}
}



function main()
Say(DOIXU[1][1],2,DOIXU[2][1],DOIXU[3][1])
end;

function exchange()
Say(SELXU[1][1],5,SELXU[2][1],SELXU[3][1],SELXU[4][1],SELXU[5][1],SELXU[6][1])
end;

function out()
Talk(1,"","Neu muon doi <color=fire>Xu<color>, Xin hay quay lai lan sau!")
end;


function ex1xu()
XU = GetTask(66)
if (GetCash() >= 5000000)
then
Pay(5000000)
SetTask(66,XU+1)
Msg2Player("Doi tien van thanh xu thanh cong");
Msg2Player("Ban da doi 500v thanh 1 Xu");
Msg2Player("Ban nhan duoc +1 Xu");
else
Msg2Player("Ngan luong trong hanh trang khong du, xin thu lai!");
end
end;

function ex2xu()
XU = GetTask(66)
if (GetCash() >= 10000000)
then
Pay(10000000)
SetTask(66,XU+2)
Msg2Player("Doi tien van thanh xu thanh cong");
Msg2Player("Ban da doi 1000v thanh 2 Xu");
Msg2Player("Ban nhan duoc +2 Xu");
else
Msg2Player("Ngan luong trong hanh trang khong du, xin thu lai!");
end
end;

function ex5xu()
XU = GetTask(66)
if (GetCash() >= 25000000)
then
Pay(25000000)
SetTask(66,XU+5)
Msg2Player("Doi tien van thanh xu thanh cong");
Msg2Player("Ban da doi 2500v thanh 5 Xu");
Msg2Player("Ban nhan duoc +5 Xu");
else
Msg2Player("Ngan luong trong hanh trang khong du, xin thu lai!");
end
end;

function ex10xu()
XU = GetTask(66)
if (GetCash() >= 50000000)
then
Pay(50000000)
SetTask(66,XU+10)
Msg2Player("Doi tien van thanh xu thanh cong");
Msg2Player("Ban da doi 5000v thanh 10 Xu");
Msg2Player("Ban nhan duoc +10 Xu");
else
Msg2Player("Ngan luong trong hanh trang khong du, xin thu lai!");
end
end;

Xem coi ứng dụng như vậy có lỗi phần nào không?

Čħīċķėň
23-12-10, 11:17 AM
Cách này e phát triển làm bang hội, chuyển sinh, liên đấu, lưu mảng dữ liệu( nhưng muốn đưa lên onl phải suy nghĩ một cách lưu khác ) rất hữu ích ^^

Rồi nó cũng sẽ thành cách viết script chính của chúng ta ^^

thanh159
23-12-10, 12:21 PM
Cách viết hay đó.
Phát triển tốt nhé:)


Tên miền cbgame.vn đã hết hạn sử dụng, đang bị tạm ngừng. Để biết thông tin chi tiết, mời nhập mã xác thực phía dưới.
;))

thaihoa91
23-12-10, 12:32 PM
Uh :D Cái nào hạn chế dc thì anh hạn chế :D Sau này còn cho test trước khi ra chính thức mà ! Để coi chạy ổn ko đã :D

kenshiwo
25-12-10, 11:03 AM
Mới đem ra xài xong, nó lỗi nhiều hơn xài SayEx({"",n,"","",}); Tình hình là xài cái này rắc rối lắm, khi Include sang Script khác
Cái mảng này làm script nhiều ra thêm chứ O.o chẳng có hay gì bằng Script trên
Script mảng:

MODAU = {
{"Noi 1"},
{"Chon 1"},
{"Thoat"}
}

function main()
SAY(MODAU[1][1],2,MODAU[2]1,MODAU[3]1)
end;


Script Thường


function main()
SayEx({
"Noi 1",2,
"Chon 1",
"Thoat"
});
end;


Mình đã đưa vào dùng thử, xài nhiều quá Bug lỗi thì phải, vì nó chạy không hay bằng SayEX :(

Čħīċķėň
30-12-10, 09:00 PM
function main()
SAY(MODAU[1][1],2,MODAU[2]1,MODAU[3]1)
end;
cái gì đây ko bug mới lạ :))

thaihoa91
30-12-10, 09:10 PM
SAY(MODAU[1][1],2,MODAU[2]1,MODAU[3]1)

<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>

Ông kensiwo thử copy toàn bộ code tui post ở trang đầu vào test xem, lỗi mới lạ đó ;)) Mảng này viết như tui thì cho dễ nhìn thui ! Chứ viết dài quá phải kéo thanh ngang mắc công !

[B.M.W]Sports
31-12-10, 10:29 AM
技能限制升级(高级技能)

以下是代码,保存为.lua文件即可,

我使用后仍有点问题,高手指点一下� �

SOSkillLevelUp={}
MESSAGES={
"由于你『%s』的基础修为太低,限制了 『%s』的修炼。",
"由于你『%s』的修为太低,限制了『%s� ��的提升。",
"你『%s』的修为已经达到顶级了,无法 再得到更高的提升。"
}

--峨嵋普渡众生升级限制
function SOSkillLevelUp.Pudu_zhongsheng()
local perSkills={{93,"慈航普渡"},{89,"梦蝶"},{86,"流水"},{92,"佛心慈佑"},{282,"清音梵唱"}}
local mainSkill = {332,"普渡众生"}
local mlvl = HaveMagic(mainSkill[1]),plvl
local i
if(mlvl>19) then
Msg2Player(format(MESSAGES[3],mainSkill[2]))
return 0
end
for i=1,getn(perSkills) do
plvl = HaveMagic(perSkills[1])
if(plvl < 5) then
Msg2Player(format(MESSAGES[1],perSkills[2],mainSkill[2]))
return 0
end
if(mlvl > 15) then
AddMagic(mainSkill[1],mlvl+1)
AddMagicPoint(-1)
return 1
end
if(plvl<mlvl+5) then
Msg2Player(format(MESSAGES[2],perSkills[2],mainSkill[2]))
return 0
end
end
AddMagic(mainSkill[1],mlvl+1)
AddMagicPoint(-1)
return 1
end

--唐门乱环击升级限制
function SOSkillLevelUp.Luanhuan_ji()
local perSkills={{347,"地焰火"},{303,"毒刺骨"},{343,"穿心刺"},{345,"寒冰刺"},{349,"雷击术"}}
local mainSkill = {351,"乱环击"}
local mlvl = HaveMagic(mainSkill[1]),plvl
local i
if(mlvl>19) then
Msg2Player(format(MESSAGES[3],mainSkill[2]))
return 0
end
for i=1,getn(perSkills) do
plvl = HaveMagic(perSkills[1])
if(plvl < 5) then
Msg2Player(format(MESSAGES[1],perSkills[2],mainSkill[2]))
return 0
end
if(mlvl > 15) then
AddMagic(mainSkill[1],mlvl+1)
AddMagicPoint(-1)
return 1
end
if(plvl<mlvl+5) then
Msg2Player(format(MESSAGES[2],perSkills[2],mainSkill[2]))
return 0
end
end
AddMagic(mainSkill[1],mlvl+1)
AddMagicPoint(-1)
return 1
end

--五毒断筋腐骨升级限制
function SOSkillLevelUp.Duanjin_fugu()
local perSkills={{67,"九天狂雷"},{70,"赤焰蚀天"},{64,"冰蓝玄晶"},{356,"穿衣破甲"},{72,"穿心毒刺"}}
local mainSkill = {390,"断筋腐骨"}
local mlvl = HaveMagic(mainSkill[1]),plvl
local i
if(mlvl>19) then
Msg2Player(format(MESSAGES[3],mainSkill[2]))
return 0
end
for i=1,getn(perSkills) do
plvl = HaveMagic(perSkills[1])
if(plvl < 5) then
Msg2Player(format(MESSAGES[1],perSkills[2],mainSkill[2]))
return 0
end
if(mlvl > 15) then
AddMagic(mainSkill[1],mlvl+1)
AddMagicPoint(-1)
return 1
end
if(plvl<mlvl+5) then
Msg2Player(format(MESSAGES[2],perSkills[2],mainSkill[2]))
return 0
end
end
AddMagic(mainSkill[1],mlvl+1)
AddMagicPoint(-1)
return 1
end

--天忍摄魂乱心升级限制
function SOSkillLevelUp.Shehun_luanxin()
local perSkills={{136,"火焚莲华"},{137,"幻影飞狐"},{140,"飞鸿无迹"},{364,"悲酥清风"},{143,"厉魔夺魂"}}
local mainSkill = {391,"摄魂乱心"}
local mlvl = HaveMagic(mainSkill[1]),plvl
local i
if(mlvl>19) then
Msg2Player(format(MESSAGES[3],mainSkill[2]))
return 0
end
for i=1,getn(perSkills) do
plvl = HaveMagic(perSkills[1])
if(plvl < 5) then
Msg2Player(format(MESSAGES[1],perSkills[2],mainSkill[2]))
return 0
end
if(mlvl > 15) then
AddMagic(mainSkill[1],mlvl+1)
AddMagicPoint(-1)
return 1
end
if(plvl<mlvl+5) then
Msg2Player(format(MESSAGES[2],perSkills[2],mainSkill[2]))
return 0
end
end
AddMagic(mainSkill[1],mlvl+1)
AddMagicPoint(-1)
return 1
end

--昆仑醉仙错骨升级限制
function SOSkillLevelUp.Zuixian_cuogu()
local perSkills={{392,"束缚咒"},{174,"羁绊符"},{393,"北冥到海"},{175,"欺寒傲雪"},{90,"迷踪幻影"}}
local mainSkill = {394,"醉仙错骨"}
local mlvl = HaveMagic(mainSkill[1]),plvl
local i
if(mlvl>19) then
Msg2Player(format(MESSAGES[3],mainSkill[2]))
return 0
end
for i=1,getn(perSkills) do
plvl = HaveMagic(perSkills[1])
if(plvl < 5) then
Msg2Player(format(MESSAGES[1],perSkills[2],mainSkill[2]))
return 0
end
if(mlvl > 15) then
AddMagic(mainSkill[1],mlvl+1)
AddMagicPoint(-1)
return 1
end
if(plvl<mlvl+5) then
Msg2Player(format(MESSAGES[2],perSkills[2],mainSkill[2]))
return 0
end
end
AddMagic(mainSkill[1],mlvl+1)
AddMagicPoint(-1)
return 1
end



kiểu này có giống của TH không ta

thaihoa91
31-12-10, 06:49 PM
Chính xác là nó đó, nó dc áp dụng nhìu trong Server lắm ;)) đừng coi thường nó ! Mấy thứ quy định opt của skills trong .lua cũng là mảng ko à !

thachlong78
05-01-11, 07:58 PM
Mảng có thể hiểu là tập hợp của nhiều biến, mỗi phần tử của mảng là 1 biến. Mảng dùng trong jxp rất lâu rồi. Cách viết kiểu như trên chỉ là để dễ chỉnh xửa thôi.