[TLBB] Lua basic
Hello & Welcome to our community. Is this your first visit? Đăng Ký
Follow us on
Follow us on Facebook Follow us on Twitter Linked In Flickr Watch us on YouTube My Space Blogger
 
Kết quả 1 đến 2 của 2

Chủ đề: Lua basic

  1. #1
    Super Moderator Sói Đẹp Trai's Avatar
    Ngày tham gia
    Apr 2011
    Đang ở
    地獄
    Bài viết
    3,991
    Thanks
    369
    Thanked 4,049 Times in 1,402 Posts

    Icon1 Lua basic

    LUA là ngôn ngữ lập trình mở, nó có đầy đủ các tính chất của một ngôn ngữ mở, các hàm trong nó có thể được build từ nhiều ngôn ngữ khác. Nói nôm na là như vậy. Đó là cái lý do giải thích cho mấy cái hàm riêng trong game TLBB.

    Để làm được những script đơn giản trước tiên bạn phải biết lập trình, nếu ai biết rồi có thể tham khảo webside chuyên về Lua basic.
    Code:
    http://www.lua.org/pil/1.html
    Về Lua basic thì không cần phải mất nhiều thời gian mà tóm lại chỉ cần hiểu những cái sơ đẳng trong các ngôn ngữ lập trình nào đó là hoàn toàn dễ dàng. Theo mình thì hiểu C và Pascal là quá đủ.

    Các khái niệm như biến, kiểu, mảng, bản ghi hay chuỗi cần đọc kỹ hơn một chút. Đặc biệt trong lua mọi thứ đều được định nghĩa dạng con trỏ, ví dụ như muốn khai báo biến nó na ná Java và C, ta dùng cấu trúc.
    Code:
    local Tên_biến=Giá_Trị
    <<Lưu ý là nếu không có phần Giá_Trị thì Tên_biến mặc định sẽ là kiểu con trỏ nil>>
    Tương tự như vậy khai báo mảng ta khai báo giống bên C.
    Code:
    local Tên_mảng={}
    <<Mảng này sẽ mặc định các phần tử của nó = nil và số phần tử ban đầu = 0>>
    local Tên_mảng={1,2,"a","b"}
    <<Mảng này gồm 4 phần tử khác nil và được định nghĩa sẵn đánh số từ 1 đến 4, Phần tử thứ 3 có giá trị "a">>
    Để lấy phần tử của mảng khác nil, ta dùng lệnh.
    Code:
    getn(Tên_Mảng)
    Tương tự bạn có thể định sẵn các phần tử của mảng ban đầu giống C và có cái thú vị mà mình đã ứng dụng thành công Lua basic trong nhiều bài toán đòi hỏi giải thuật trên chuỗi phức tạp mà bên C nó phải mất nhiều câu lệnh dài mới làm được.
    Ví dụ cách định vị phần tử của mảng như sau.
    Code:
    local My_Array={}
    My_Array["Soi"]="Soi"
    My_Array[0]=0
    Lệnh rẽ nhánh, vòng lặp và hàm con.
    Code:
    Lệnh rẽ nhánh
    if BT_Logic_1 then TH_Lệnh_1
    elseif BT_Logic_2 then TH_Lệnh_2
    ...
    else TH_Lệnh_N
    end
    //Chú ý là elseif này viết liền vẫn đúng mà tách ra cũng không sai nhé.
    Vòng lặp for
    for i=x,y do
    end
    //Vòng lặp với i chạy từ x đến y, mỗi lần lặp i tăng 1 đơn vị, nếu y<x thì vòng lặp ko tồn tại. Nó giống vòng for bên Pascal.
    Vòng lặp repeat until
    repeat
    until BT_Logic
    //Vòng lặp này sẽ thực hiện lệnh trước khi kiểm tra điều kiện BT_Logic, cấu trúc này giống bên Pascal và bên C/Java là do..while
    Vòng lặp while do
    while BT_Logic do
    end
    //Vòng lặp này ngược với repeat until nghĩa là kiểm tra điều kiện trước khi thực hiện lệnh, giống bên Pascal
    Lệnh thoát khỏi vòng lặp và tiếp tục vòng lặp
    Để thoát khỏi vòng lặp ngay ta dùng lệnh break và để tiếp tục vòng lặp bỏ qua các lệnh bên dưới ta dùng lệnh continue.
    Hàm con
    function Tên_hàm(Tham_biến_1,Tham_biến_2,...,Tham_biến_N)
    return Giá_trị_của_hàm
    end
    Khóa return có thể có hoặc không tùy mục đích, nhưng một khi đã return thì sẽ out ra khỏi hàm con ngay lập tức.
    //Lưu ý các phương pháp đệ quy quay lui hoàn toàn vẫn áp dụng được, và hàm có thể không trả về kiểu gì giống procedure của Pascal và void của Java/C.
    Một số hàm quan trọng mà ta cần biết của Lua basic.
    Code:
    --Các hàm tính toán trên số thực
    math.mod(x,y) => Trả về giá trị phần dư của phép chia 2 số nguyên x cho y.
    math.floor(x) => Trả về số nguyên gần nhất nhỏ hơn số thực x, giống hàm trunc(x) bên Pascal.
    math.abs(x) => Trả về trị tuyệt đối của số thực x.
    math.sqrt(x) => Trả về căn bậc 2 số học của số thực x.
    --Các hàm trên chuỗi
    string.len(s) => Trả về độ dài chuỗi s.
    string.sub(s,x,y) => Trả về chuỗi con của s tính từ vị trí x đến y. Nếu y vượt quá độ dài chuỗi s thì mình chưa check cái này nhưng theo suy đoán nó sẽ trả ra giá trị nil, nếu không tìm thấy chuỗi x trong s thì hàm trả về giá trị nil.
    string.gsub(s,x,y) => Trả về chuỗi s sau khi đã thay thế tất cả các chuỗi con x thành y.
    string.find(s,x) => Tìm vị trí chuỗi con x trong s.
    
    Lưu ý không có khái niệm chuỗi giống mảng char như các ngôn ngữ lập trình khác. Vì thế muốn lấy phần tử thứ i của chuỗi s ta phải dùng hàm string.sub(s,i,i)
    
    tostring(x) => Chuyển số x thành chuỗi
    tonumber(x) => Chuyển chuỗi x thành số. Trường hợp không chuyển được hàm trả về giá trị nil.
    type(x) => Trả ra kiểu của giá trị x. Ví dụ type("a")=="string", type(1)=="number"
    
    Lưu ý là không thể so sánh lớn nhỏ một kiểu xác định với con trỏ nil. Ví dụ 4>nil, s<nil. Nếu là 4~=nil và s~=nil thì ok.
    Trong lua hoàn toàn thực hiện được phép cộng 2 số lớn mà bên ngôn ngữ khác trừ Java, Python ta phải xây dựng hàm riêng.
    Ngoài ra còn vài hàm bên Lua basic nữa nhưng do ít dùng nên mình ko đề cập đến các bạn có thể tham khảo trang web trên.

    Một ví dụ về code Lua Basic
    Trích dẫn Gửi bởi Sói Đẹp Trai Xem bài viết
    Mình có đoạn code này chưa biên dịch thử. Dùng cho Lua bên Client. Tư tưởng:
    Muốn chuyển số Hex X sang Dec ta chuyển X qua Bin rồi chuyển từ Bin qua Dec.

    Code:
    local Hex_Bin=
    {
    	["0"]="0000",
    	["1"]="0001",
    	["2"]="0010",
    	["3"]="0011",
    	["4"]="0100",
    	["5"]="0101",
    	["6"]="0110",
    	["7"]="0111",
    	["8"]="1000",
    	["9"]="1001",
    	["A"]="1010",
    	["B"]="1011",
    	["C"]="1100",
    	["D"]="1101",
    	["E"]="1110",
    	["F"]="1111",
    }
    
    function Power2(x)
    	if x==1 then
    		return 2
    	end
    	local p=Power2(math.floor(x/2))
    	if math.mod(x,2)==0 then return p*p
    	else return p*p*2
    end
    
    function HexToBin(x)
    	for i=1,string.len(x)	--Upcase all Hex part of Hex number x
    		if x[i]=="a" then
    			x[i]="A"
    		elseif x[i]=="b" then
    			x[i]="B"
    		elseif x[i]=="c" then
    			x[i]="C"
    		elseif x[i]=="d" then
    			x[i]="D"
    		elseif x[i]=="e" then
    			x[i]="E"
    		elseif x[i]=="f" then
    			x[i]="F"
    		end
    	end
    	local Bin=""
    	local i=1
    	while string.sub(x,i,i)=="0" do	--Delete the "0" at start of Hex number x (such as 000FA0 => FA0)
    		i=i+1
    	end
    	x=string.sub(x,i,string.len(x))
    	for i=1,string.len(x) do
    		if Hex[x[i]]==nil then	--x[i] is not a part of hex number
    			return "Unknow"
    		end
    		Bin=Bin..Hex[x[i]]
    	end
    	return Bin
    end
    
    function BinToDex(x)
    	local Sol=0
    	for i=1,string.len(x)-1 do
    		if string.sub(x,i,i)==1 then
    			Sol=Sol+Power2(string.len(x)-i)
    		end
    	end
    	return Sol
    end
    
    function HexToDec(x)
    	local S=HexToBin(x)
    	if S=="Unknow" then
    		return -1
    	end
    	return BinToDex(S)
    end
    
    --To call this Script, you must call by HexToDec(Number) in which Number is a Hex number you want to convert to Dec number
    --If the result is -1, you pressed a wrong Hex number
    Trong đó có vài cái hàm chỉ dùng đc bên Client mà ko dùng đc bên SV, nếu muốn chuyển qua sv thì bạn phải chuyển các thứ như sau:
    string.sub => strsub
    string.len => strlen
    math.mod => mod
    math.floor => floor
    Ai còn ý kiến gì về Lua basic cứ post tại đây nếu biết mình sẽ giải đáp. Hẹn gặp lại vào topic Lua in game.
    Lần sửa cuối bởi Sói Đẹp Trai, ngày 11-01-15 lúc 03:11 AM.
    Khách viếng thăm hãy cùng Sói Đẹp Trai xây dựng diễn đàn CLBGAMESVN vững mạnh nhé!

  2. The Following 3 Users Say Thank You to Sói Đẹp Trai For This Useful Post:

    dinhdtd (16-12-14), makute7413 (16-12-14), zacktt (17-12-15)

  3. #2
    Thành Viên kv02301009's Avatar
    Ngày tham gia
    Feb 2013
    Bài viết
    173
    Thanks
    6
    Thanked 16 Times in 12 Posts

    Ðề: Lua basic

    tonumber(x) => Chuyển chuỗi x thành số. Trường hợp không chuyển được hàm trả về giá trị nil.
    cái này chuyển x thành số, nếu mk muốn chuyển x thành chuỗi ký tự dạng văn bản thì chuyển thành gì ạ em cảm ơn
    Khách viếng thăm hãy cùng kv02301009 xây dựng diễn đàn CLBGAMESVN vững mạnh nhé!

 

 

Các Chủ đề tương tự

  1. Cần xin gamemode basic map san fierro!
    Bởi sacon12 trong diễn đàn GTA: SA Multiplayer
    Trả lời: 0
    Bài viết cuối: 07-09-14, 12:01 PM
  2. [VB6] Mã nguồn game caro viết bằng Visual Basic (AI)
    Bởi iaion trong diễn đàn Thư Viện Mã Nguồn Mở
    Trả lời: 0
    Bài viết cuối: 12-02-14, 02:39 PM
  3. Basic WebShop + Rage Fighter Items
    Bởi Mr.Noob trong diễn đàn SQL Server & Website
    Trả lời: 0
    Bài viết cuối: 18-01-11, 11:40 PM
  4. Basic MU Server Guides
    Bởi datinh4ever trong diễn đàn Guides - Kho Lưu trữ
    Trả lời: 8
    Bài viết cuối: 14-04-07, 05:59 PM

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •  
Múi giờ GMT +7. Bây giờ là 04:59 AM.
vBulletin®, Copyright ©2000-2011, Jelsoft Enterprises Ltd.
CLBGamesVN không chịu trách nhiệm về Luật Bản Quyền của các tài liệu, bài viết v.v...được đăng tải trên diễn đàn này.
Diễn đàn phát triển dưới sự đóng góp của tất cả thành viên. BQT chỉ là những người thành lập ra sân chơi, quản lý và duy trì về mặt kỹ thuật, nội dung khi hợp lệ.