PDA

View Full Version : Cách Thức Viết Script Đây



quangken
03-10-10, 03:44 PM
Như các bạn đã biết, các file trong thư mục script của server và client đều có đuôi là .lua . Đây chính là ngôn ngữ lập trình lua 4.0. Để hiểu rõ về ngôn ngữ lập trình này tôi xin giới thiệu sơ qua về các kiểu dữ liệu, từ khóa, cách sử dụng của ngôn ngữ này.

Kiểu dữ liệu :
Các kiểu dữ liệu trong lua4.0 là : nil, number, string, function, userdata, and table.

Các từ khóa :
Code:
and break do else elseif
end for function if in
local nil not or repeat
return then until while
Các dấu toán tử :
Code:
and or
< > <= >= ~= ==
..
+ -
* /
not - (unary)
^
Quyền ưu tiên được tính từ dưới lên.

Cách đặt và gán giá trị cho biến :
Bạn đặt tên biến bình thường như các ngôn ngữ lập trình khác, gán giá trị trực tiếp cho biến
Ví dụ : i = 3 -- ở đây ta đặt tên biến là i và gán giá trị là 3
Cấu trúc lệnh :
Một số cấu trúc lệnh trong lua4.0 như sau :
Code:
while "biểu thức" do "thực hiện" end -- cấu trúc lặp với từ khóa while...do
repeat "thực hiện" until "biểu thức" -- cấu trúc lặp với từ khỏa repeat...until
if "biểu thức 1" then "thực hiện 1" {elseif "biểu thức 2 then "thực hiện 2"} [else "thực hiện 3"] end -- Cấu trúc so sánh if...then..else
for "biến" = "biểu thức 1","biểu thức 2" do "hành động" end -- cấu trúc lặp for...do
Thông thường thì khi kết thúc một cấu trúc điều khiển ta phải kết thúc bằng end
Các bạn lưu ý, đây là ngôn ngữ lập trình có phân biệt chữ hoa và chữ thường, vì vậy nên chú ý khi đặt tên biến và viết các từ khóa
Ví dụ, chuơng trình sẽ báo lỗi nếu bạn viết if thành If.

Định nghĩa hàm trong Lua4.0 :
Cấu trúc khai báo 1 hàm trong lua như sau :
Code:
function tenham(bien1,bien2,...,bienn) -- khai báo tên biến

thực hiện -- các câu lệnh dùng trong hàm

end; -- từ khóa kết thúc hàm

Phần chuơng trình được đặt trong hàm main()
Code:
function main()
--các dòng lệnh
end;
Câu chú thích trong lua được viết sau dấu
Code:
-- câu chú thích
Lệnh để thêm file từ ngoài vào là
Code:
Include("duongdanfile");
OK như vậy là bạn có thể hiểu thêm một chút về ngôn ngữ này, bây giờ mình sẽ làm một ví dụ để bạn hiểu thêm hén
Code:
vidu.lua
Include("\\Script\\Global\\station.lua"); -- thêm file station.lua từ Script\Global vào file này, đường dẫn \ thì thêm dấu \ chuơng trình sẽ hiểu là \
function main() -- phần thân chương trình
i = 3; -- đặt tên biến là 3
if (i = 3) then -- nếu i = 3 thì
xaphu() -- gọi hàm xa phu
else -- nếu i khác 3
exit() -- gọi hàm exit
end -- hết cấu trúc if
end; -- hết phần thân chương trình
function xaphu() -- khai báo hàm xaphu()
if (HaveMagic(210)==-1) then
AddMagic(210)
end -- hết hàm if
end;
function exit() -- khai báo hàm exit()
i = 2
end;
Hy vọng các bạn sẽ hiểu phần nào về ngôn ngữ lập trình này để chúng ta có thể hiểu rõ hơn về các file script trong JX.






Sau đây mình xin trình bày một số hàm mẫu cơ bản để lập trình script.Trích dẫn từ bài viết của Akarizone.
Trích dẫn:
Hàm Say : nói chuyện, giao tiếp với NPC, có lựa chọn
Code:
Say("lời nói",0) --Hiện câu thông báo và 1 chọn lựa thoát khỏi câu thông báo
Say("lời nói", n, "lựa chọn 1/hàm 1", "lựa chọn 2/hàm 2",..., "lựa chọn n/hàm n") --Hiện câu thông báo và n lựa chọn, mỗi lựa chọn sẽ tương ứng thực hiện hàm n. n có thể là 2, 3, 4...

Ví dụ :
Say("Xa phu : Nguoi muon di dau ?", 4, "Chien truong tong kim/gotk", "Bien Kinh/gobk", "Khong muon di dau/cancel")

Hiển thị
------------------------------------------------------
Xa phu : Nguoi muon di dau ?


Chien truong tong kim
Bien Kinh
Khong muon di dau
-------------------------------------------------------
Hàm Talk : hiển thị bảng thông báo không có lựa chọn
Code:
Talk(Talk(1,"","câu thông báo"); --Bạn chỉ cần thay câu thông báo thành câu muốn nói
Ví dụ :
Talk(1,"","Vo dang de tu :Ban thuoc he Kim, khong the gia nhap phai Vo Dang");
Hiển thị :
--------------------------------------------------------
Vo dang de tu :Ban thuoc he Kim, khong the gia nhap phai
Vo Dang



--------------------------------------------------------
Hàm NewWorld(nMap, posx, posy) : dùng để di chuyển nhân vật đến vị trí posx,posy trên bản đồ nMap
Code:
NewWorld(nMap, posx, posy)
nMap : id của bản đồ, có thể tìm trong file maplist.ini ở thư mục server\settings, và id này phải được khai báo trong file worldset.ini ở thư mục server\maps
posx,posy : là số tọa độ điểm của nơi cần đến được tính như sau :
posx = tọa độ x trong game * 8
posy = tọa độ y trong game * 16
Ví dụ : Muốn di chuyển nhân vật đến Biện Kinh ở tọa độ 204,198
id map Biện Kinh, tìm trong maplist.ini là 37
posx = 204 * 8 (1632)
posy = 198 * 16 (3168)
Như vậy bạn phải viết là
NewWorld(37,1632,3168)
Các hàm liên quan : GetCash(), Pay(), SetFightState(), AddTermini()
Hàm AddMagic(sId, sLevel) : thêm kĩ năng cho nhân vật.
Code:
AddMagic(sId, sLevel)
sId : id của kĩ năng trong file skills.txt.
sLevel : đẳng cấp của kĩ năng đó
Ví dụ : muốn thêm kĩ năng Thiên địa vô cực(id=365) cấp 20 cho nhân vật
AddMagic(365, 20)
Hàm AddItem(nItemClass,nDetailType,nParticualrType,nLe vel,nSeries,nLuckn,nItemLevel) : thêm vật dụng cho nhân vật.
Code:
AddItem(nItemClass,nDetailType,nParticualrType,nLe vel,nSeries,nLuckn,nItemLevel)
nItemClass : Hạng mục item, hiện tại có những giá trị sau :
0 : vật dụng mang trên người(vũ khí, áo, mũ...)
1 : vật dùng hồi sức(máu, mana...)
4 : vật phẩm nhiệm vụ
5 : thổ địa phù
nDetailType : loại item giá trị từ 0 đến 10 tuơng tứng với [Vũ khí gần, Vũ khí xa, Áo, Nhẫn, Dây chuyền, Giày, Thắt lưng, Mũ, Bao tay, Ngọc bội, Ngựa]
nParticualrType : các item trong loại đó, ví dụ vũ khí gần sẽ có kiếm, đao, côn... Tùy vào loại item sẽ có nhiều hay ít item
nLevel : đẳng cấp món đồ 1 - 10
nSeries : thuộc tính ngũ hành 0 - 4 tương ứng Kim, Mộc, Thủy, Hỏa, Thổ
nLuckn : chỉ số may mắn cái này nên để là 0, vì theo mình được biết, cái này càng nhỏ, may mắn càn cao
nItemLevel : đẳng cấp phép thuật của món đồ, giá trị từ 1 - 10, số càng cao, dòng trên món đồ càng xịn

Ví dụ : muốn thêm một thanh đao vip cấp 10 cho nhân vật
AddItem(0,0,1,10,2,0,10)
Sẽ được 1 thanh đao có hút sinh lực, nội lực, tốc độ đánh, băng sát...



Như vậy các bạn tham khảo nha. Đây chỉ là một số hàm cơ bản

Tớ Móc Trong Ebook cko newbie chưa đao đc
Tiếp Theo là Mở Máp :
Thân chào các bạn ! Sau khi cài đặt xong server chắc hẵn các bạn rất chú tâm đến việc mở thêm maps để chơi cho hấp dẫn.
Nay mình xin hướng dẫn các bạn cách mở maps trong jx offline.Mình không biết đúng không nhưng mà các bạn thử xem vì mình chưa chắc lắm khoảng 75%.
Như theo bài Cấu Trúc Chung Của Một Server thì tôi có thể nói phần maps thì ta sẽ nói đến các dữ liệu của maps ở mục Maps trong server.Mục Maps trong server gồm có:
*File có tên WorldSet.ini -----File này chứa các ID của từng maps được mở để chơi game.
Cấu trúc của Flie này như sau Đây là mẫu WorldSet.ini của mình)


[Init]
Count=35 ----- Đây là số thông báo số Maps được mở.
[World]
World00=53------Ba Lăng Huyện
World01=59------Thiên Vương Bang
World02=65------Sơn Động Thiên Vương Đảo
World03=67------Tầng 2 Sơn Động Định Hồ
World04=71------Mê Cung Bạch Thuỷ Động
World05=77------Mê Cung Yến Tử Động
World06=73------Mê Cung Phục Lưu Động
World07=115----Cái Bang Phái
World08=80------Dương Châu
World09=116----Tầng 1 Địa Hạ Mê Cung(Tường Vân Động)
World10=9-------Trường Giang Nguyên Đầu
World11=340----Mạc Cao Quật
World12=336----Phong Lăng Độ
World13=326----Tống Kim(Khu vuc binh nguyen (so cap))
World14=19------Kiếm Các Tây Nam
World15=131----Côn Lôn Phái
World16=25------Đường Môn Phái
World17=13------Nga Mi Phái
World18=49------Thiên Nhẫn Giáo
World19=103----Thiếu Lâm Phái
World20=154----Thuý Yên Phái
World21=81------Võ Đang Phái
World22=22------Mê Cung Bạch Vân Động
World23=243-----Lâm Du Quan
World24=1--------Phượng Tường
World25=11------Thành Đô
World26=37------Biện Kinh
World27=78------Tương Dương
World28=55------Đào Hoa Nguyên
World29=176-----Lâm An
World30=162-----Phu Đại Lý
World31=242-----Đảo Tẩy Tuỷ
World32=244-----Trường Bạch Sơn Bắc Lộc
World33=24------Mê Cung Hưỡng Thuỷ Động
World34=23------Mê Cung Thần Tiên Động

Phân tích:
Vậy ở đây Count là thông số hiển thị ,tức là thống kê số maps được mở trong game.
World00=53 là thứ tự và ID của maps được mở.Mỗi mẫu WorldSet.ini thì luôn bắt đầu phần thứ tự maps từ “World00=x”(x L à ID maps tuỳ ý) và tiếp tục “World01=…”
“World02=…”
“World03=…”
Sau “=” là ID maps bạn muốn mở.
Sau khi đã hoàn thành số maps cần mở thì đếm lại số “World…=…” mà mình mở được rồi điền vào chỗ Count sau dấu “=”
VD: Mình mở đến “World50” thì mình sẽ khai ở Count là Count=51 .Vì World bắt đầu từ 00 mà.
*Các dữ liệu của map trong mục Maps của server:
Một dữ liệu maps gồm các mục như: 1 file có tên maps đó với đuôi *.wor , 1 mục mang tên maps(trong đó có các mục tên như vầy “v_089”,” v_089” tuỳ ở dữ liệu maps mà có các mục tên khác nhau.DỰa vào đó bạn cũng có thể kiểm tra xem maps nào có dữ liệu và maps nào không có dữ liệu.Trong các mục “v_089” thì lại có các file có đuôi *.dat
*File Maplist.ini trong thư mục Settings:
File này có liên quan đến maps nhưng không nằm trong mục Maps của server mà nằm trong mục Settings của server.
File này chứa các ID Maps , Đường dẫn đến dữ liệu maps , tên hiển thị của từng maps trong game.
Các bạn chú ý: để mở được các maps thì bạn phải dựa vào ID Maps.Tức là ID mà bạn mở trong WorldSet.ini là các ID có thong tin trong Maplist.ini
Rất dễ đúng không các bạn!
Nếu các bạn chú ý thì sẽ hiểu được thôi!
Thân chào các bạn!
Chỉnh OPPTION ITEM nè
Sau đây mình sẽ HD các bạn chỉnh option cho đồ đạc, ko khó lắm đâu.

--Mình lấy cái Kim Lan Kiếm làm VD (các bạn sẽ áp dụng được với các thứ khác thôi )
---Các bạn vào settings/item/meleeweapon.txt mở nó lên bằng Excel (Hãy dùng Excel để chỉnh sửa sẽ ko bị lỗi.)
---Trong dòng thông tin về Kim Lam Kiếm các bạn thấy sau dòng Chữ Trang bị Hoàng Kim là số 99999 đây là giá tiền của món đồ này tiếp theo nó sẽ là số 123 đây là đẳng cấp của món đồ vì nó là đồ hoàng kim nên mới có đẳng cấp này đồ bình thường chỉ tới cấp 10 thôi, cái này ko quan trọng , sau đó là con số 0 và bây giờ là tới cái chúng ta quan tâm chính là op của đồ
Quote:
28 66 66 29 126 126
-----Giải thích : 28 là ID của op Sát thương nhỏ nhất 29 là Id của op Sát thương lớn nhất,
Quote:
66 66

Quote:
126 126
là chỉ số của op Sát thương nhỏ nhất và lớn nhất

ID 28 cho thấy rằng cái kiếm này sẽ có sát thương nhỏ nhất nhưng ko nói lên nó là bao nhiêu vì vậy
Quote:
66 66
là con số chỉ lên rằng sát thương nhỏ nhất của cây kiếm là 66 và sát thương lớn nhất của cây kiếm là 126 các bạn có thể chỉnh 2 dòng này để được cây kiếm có sát thương cao hơn tùy các bạn cho con số thay vào số 66 và 126.
---Tiếp theo
Quote:
115 30 60
-----Giải thích : 115 là ID của Op Tốc độ đánh ngoại công
Quote:
30 60
Nói lên rằng Kim lan kiếm sẽ có dòng tốc độ đánh ngoại công và xác xuất bạn nhận được Kiếm sẽ có tốc độ đánh từ 30 tới 60 , nếu bạn muốn lúc nào cũng nhận được kiếm có tốc độ đánh 100% như ảnh mình đã post các bạn sửa
Quote:
30 60
thành
Quote:
100 100
vậy là lúc nào kiếm này cũng có tốc 100 hé hé


****Đó là giải thích sơ qua và ví dụ cho các bạn hiểu tới đây chắc các bạn cũng thấy nó dễ dàng quá phải không, chỉ cần muốn có op nào thì cho ID của op đó vào là xong.
---Vẫn còn những điều sau các bạn cần biết và chú ý
1. 1 Món đồ chỉ có nhiều nhất là 7 op CHỨC NĂNG tính cả 2 dòng sát thương nhỏ nhất và sát thương lớn nhất với ID là 28 và 29 đó

2. Kèm theo 1 ID của op bao giờ cũng là 2 con số đi kèm nói lên op này trong khoảng nào ví dụ như cái tốc độ đánh vừa nãy mình đưa ra
Quote:
115 30 60
Tốc độ đánh Id là 115 và xác xuất nhận được đồ sẽ có tốc đánh trong khoảng 30% tới 60% cái này tùy các bạn chỉnh.

3.Sau 7 cái Id của op chức năng bao giờ cũng tới ID của op Yêu cầu ví dụ như ID op cuối cùng của Kim Lan Kiếm là
Quote:
137 10 20
thì ngay sau đó sẽ ko còn cái ID op chức năng nào nữa mà chỉ còn ID của op yêu cầu đó là
Quote:
36 99
ID 36 là Op yêu cầu đẳng cấp ( ở đây Kim Lan Kiếm yêu cầu đẳng cấp 99)

Chú ý: Kèm theo ID của op yêu cầu thìi chỉ có 1 con số đi theo mà thôi ko phải 2 con số giống như Op Chức năng

ID 32 : Op yêu cầu sức mạnh
Id 39 : Op Yêu cầu môn phái
**số kèm theo sau op yêu cầu 39
8:võ đang
4:Nga my
5:thúy yên
0:Thiếu Lam
1:Thiên vương
9:Côn lôn
3:Ngũ độc
6:Cái bang
7:Thiên nhẫn
2:Đường môn (hiện chưa có vũ khí đường môn, nhưng với cách chỉnh op này các bạn có thể tạo cho mình 1 cái tiêu giống đường môn vì vũ khi đường môn khi cầm lên tay chúng ta cũng ko nhìn thấy nên khỏi lo về mặt hình ảnh)

---------------Làm sao để biết Id của op-------------------
---Mình nghĩ nó nằm trong file magicdesc nhưng mà ko phải vì trong này Id có lúc trùng op mình thêm có lúc lệnh đi 3 chỉ số có lúc lệch 2 chỉ số, sau đây là cách các bạn test kiểm tra op nhanh và chính xác hơn
---Sau khi chỉnh xong file meleeweaon.txt bên server các bạn hãy copy nó qua bên jxclient\settings\item copy đè vào cái meleeweapon.txt trong này........chạy khởi động server xong bật client vào chơi lấy đồ bạn vừa chỉnh sẽ thấy có những dòng và các op các bạn đã chỉnh. Muốn thay đổi các Id của các op này kiểm tra các bạn ko cần chạy lại cả server mà chỉ cần thoát toàn bộ client sau đó chỉnh ID trong file meleeweapon.txt nằm trong settings của client là được mà thôi, sau đó lại vào client và chơi các bạn sẽ thấy các op đã thay đổi, cứ thế các bạn test kiểm tra có khoảng ~ 180 op tất cả......phần test dành cho các bạn , mình thì test rồi nhưng để các bạn tự test hay hơn...........







-------------------ID Vũ Khí--------------



1: tieu hao (chua ro)
2:loai hinh tieu hao
1:hp
2:the luc
3:noi luc
3:thoi gian canh x/giay**
4:dong thoi xuat xx**
=====5->27 test ko co======
28:sát thuong nho nhat**
29:sát thuong lon nhat**
30:ne tranh**
31:do ben**
32:suc manh**
33:than phap**
34:yeu cau sinh khi diem**
35:yeu cau noi cong**
36:Yêu cau dang cap**
37:thuoc tinh ngu hanh**
0:kim
1:moc
2:thuy
3:hoa
4:tho
38:Yêu cau gioi tính (0: nam; 1: nu)
39:Op Yêu cau môn phái*
0:Thieu Lam
1:Thiên vuong
2:Ðuong môn
3:Ngu doc
4:Nga my
5:thúy yên
6:Cái bang
7:Thiên nhan
8:võ dang
9:Côn lôn
40:tang sat thuong%**
41:tang ne tranh%**
42:giam thieu yeu cau%**?
43:không the phá huy
========44->84 test ko co========
85:Sinh luc toi da thêm vào diem**
86:Sinh luc toi da thêm vào %**
87:ko co (chua ro)
88hsl moi 1/2 diem**
89:Noi luc toi da thêm vào diem**
90:noi luc toi da them vao %**
91:noi luc them diem**
92:PHNL moi 1/2 giây
93:The luc thêm vào diem**
94:the luc toi da them%**
95:theluc them %**
96htl moi 1\2 them diem**
97:Suc manh + thêm diem**
98:Thân pháp thêm vào diem**
99:Sinh khí thêm vào diem**
100:Noi công + thêm diem**
101:Kháng doc %**
102:Kháng hoa %**
103:Kháng lôi %**
104:PTVL %**
105:Kháng bang %
106:Thoi gian làm cham %
107:ko co (chua ro)
108:Thoi gian trúng doc giam**
109:doc sat them vao diem**
110:thoi gian choang them vao%
111:TDDC %**
112ham vi sat thuong them vao %**
113:thoi gian phuc hoi
114:Kháng tat ca%**
115:TÐXC ngoai công**
116:TDXC noi cong**
117han don can chien diem**
118han don can chien %**
119han don tam xa them vao diem**
120han don tam xa them vao %**
121:STVL ngoai công diem**
123:Bang sát ngoai công diem**
124:loi sat ngoai cong them vao diem**
125:doc sat ngoai cong them vao diem**
126:STVL ngoai công %
127:giam toc do xuat chieu khi cong???
128:me hoac doi phuong ???
129:PTVL diem**
130:khang bang them vao dem**
131:khang hoa them vao diem**
132:khang doc them vao diem**
133:khang loi them vao diem**
134:chuyen hoa sat thuong thanh noi luc %**
135:may man them vao %**
136:hut sinh luc %**
137:Hút NL %
138:hut the luc %**
139:Ky nang thêm vào x cap**
140:ky nang he him tang x cap**
141:ky nang he moc tang x cap**
142:ky nang he thuy tang x cap**
143:ky nang he hoa tang x cap**
144:Ky nang he Tho tang x cap**
145:Ðay lùi % (??? chua hieu công dung)
146:Tan công chí mang %
147:lam choang %**
148:thoi gian keo dai trang thai ko tot x/giay**
149:Noi luc ho thân %
150:ko co (chua ro)
151:Né tránh thêm %
152:tan cong chi mang %**
153: PHSL moi 1/2 giây**
154hnl moi 1/2 giay**
155hong thu vat ly toi da %**
156:khang bang toi da %**
157:khang hoa toi da %**
158:khang loi toi da %**
159:khang doc toi da %**
160:khang tat ca %**
161:khang bang %**
162:khang hoa %**
163:khang loi %**
164:khang doc %**
165:sat thuong ngu hanh %**
166:ÐCX diem**
167:Ðo chính xác % (VK)

tungpro102
04-10-10, 03:41 PM
Copy của Mr.Zezo™ thì phải :).............................

quangken
04-10-10, 03:52 PM
Copy của Mr.Zezo™ thì phải :).............................

K phải Coppy Mà Cái Ebook VEr 2.0 của Giang ý

Mr.Rezo™
04-10-10, 03:55 PM
thì cũng từ Mr.Rezo™ mà vào đấy chứ ở đâu =))

luxfarm
04-10-10, 05:07 PM
thì cũng từ Mr.Rezo™ mà vào đấy chứ ở đâu =))

Ừ ĐC rồi tks bác tài đã viết 1 phần

kinkina2009
05-10-10, 02:48 PM
edit lại vài cái nè
Talk(số chuỗi,"thực hiện hàm tiếp theo","nội dung của chuỗi 1",...,"nội dung chuỗi n")

thực hiện hàm tiếp theo: nhét thêm vào đó là next tức là
Talk(1,"next","Không có gì")

thì sẽ thực hiện tiếp

function next()
Talk(1,"","Không có gì thì phắng đi")
end

:), có gì mình góp vui vài hàm đừng chém nhé

thaihoa91
05-10-10, 04:20 PM
Góp vui thêm cách viết Talk nhìu lần liên tiếp cho ngắn gọn bằng mảng :D


function main()

strNoiDung =
{
"Nội dung thứ 1",
"Nội dung thứ 2",
"Nội dung thứ 3",
"Nội dung thứ 4",
"Nội dung thứ 5",
"Nội dung thứ 6",
"Nội dung thứ 7"
}

Talk(7, "", strNoiDung[1], strNoiDung[2], strNoiDung[3], strNoiDung[4], strNoiDung[5], strNoiDung[6], strNoiDung[7])
end;

LàmGìĐểCóTiền
05-10-10, 05:47 PM
Góp vui thêm cách viết Talk nhìu lần liên tiếp cho ngắn gọn bằng mảng :D

Cách này vừa hay lại gọn sắp xếp dễ hiểu hơn. Cái này bác Giang có giới thiệu 1 lần rồi

Čħīċķėň
05-10-10, 11:58 PM
121:STVL ngoai công diem**
123:Bang sát ngoai công diem**

thằng số 122 là Hỏa sát ngoại công :( làm lúc trc tìm woai ko thấy hỏa sát đâu hit :( mất cả buổi

thaihoa91
06-10-10, 07:45 AM
121:STVL ngoai công diem**
123:Bang sát ngoai công diem**

thằng số 122 là Hỏa sát ngoại công :( làm lúc trc tìm woai ko thấy hỏa sát đâu hit :( mất cả buổi

Em down Ebook Giangleloi tìm cho khỏe ;))

hoivegame
06-10-10, 12:36 PM
cái script dùng mảng của thái hòa mình đã dùng thử, nhưng chỉ talk được 2 lần, còn mấy cái sau no' không talk nữa. Như vậy là nó bị sao vậy

kinkina2009
06-10-10, 12:53 PM
không thể để câu thoại quá dài nhé bạn , nếu dài quá sẽ không hiện ra đâu :)