Kết quả 1 đến 9 của 9
-
20-08-13, 10:17 PM #1
- Ngày tham gia
- Apr 2011
- Đang ở
- 地獄
- Bài viết
- 3,991
- Thanks
- 369
- Thanked 4,069 Times in 1,403 Posts
Tổng hợp nghiên cứu Thiên Long Bát Bộ (Không dành cho Newbie)
Mong rằng qua topic này, mọi người sẽ hứng thú hơn khi cùng nghiên cứu game TLBB.
Topic này gồm có các phần:
PHẦN CƠ BẢN
1. Hướng dẫn Unpack file *.axp trong Client
2. Hướng dẫn Việt hóa Server
A. Hướng dẫn hiển thị font China với Notepad++
B. Hướng dẫn sử dụng Chinest Convert Pro, công cụ việt hóa không thể thiếu
C. Giới thiệu Excel và một số hàm phục vụ đắc lực cho quá trình việt hóa
a) Các file dạng bảng cần việt hóa ( Sử dụng đến Excel )
b) Giới thiệu một thủ thuật nhỏ khi sửa file PetAttrTable.txt bằng hàm trong Excel
D. Việt hóa các file không phải dạng bảng
3. Script và đường dẫn
PHẦN NÂNG CAO DÀNH CHO NGƯỜI ĐAM MÊ LẬP TRÌNH
Chỉ tổng hợp các thứ "cơ bản" còn phát triển nó thế nào đó là ở các bạn.
4. Các vấn đề liên quan đến code đơn giản
5. Cách thức để có một script đơn giản
6. Tổng hợp các lệnh và hàm cơ bản
7. Tổng hợp các hàm nâng cao, chuyên dùng cho viết event
To be Ended!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é!
-
The Following 46 Users Say Thank You to Sói Đẹp Trai For This Useful Post:
0241618026 (23-02-20), akiem9x (22-08-13), ankol479 (20-08-13), athecang (06-06-15), Axjtaka (16-02-14), booksho (12-11-15), chiplove9x (21-08-13), dhung95 (31-07-14), dinhdtd (05-12-19), dovietthai (16-11-16), dvphong09 (21-08-13), gak0n2003 (01-06-14), haist (24-08-13), hoanggiakhoa94 (21-08-13), javia (16-10-16), khangdu2712 (06-12-21), khanhluv11 (21-08-13), laemdo0705 (12-04-15), lexuanbach (21-08-13), licatieu (09-09-19), loveyoughvk (20-10-14), makute7413 (23-06-24), mastervnn (21-08-13), minhvu123456 (22-08-13), mrdevil2212 (26-11-17), MrSteel (11-04-20), nexus7 (05-06-15), nhokga (24-07-14), pak_yuna (22-08-13), pebu5201314 (21-08-13), Refresh (21-08-13), ronglam (22-08-13), tanhn (26-08-13), thanhluan12a14 (22-08-13), thienvuong47 (20-08-13), Tuan565 (20-08-13), tuanbik1416 (21-08-13), tului (20-08-13), v0d1chs01 (23-02-14), vandunghhnd93 (23-08-13), vhinh (29-10-21), vinhthamthao (30-09-14), x30phaluoi (09-02-16), xuanphuong (16-01-19), __Han_Je_Soo__ (15-02-14), ___Rookie___ (16-02-14)
-
21-08-13, 07:13 PM #2
- Ngày tham gia
- Apr 2011
- Đang ở
- 地獄
- Bài viết
- 3,991
- Thanks
- 369
- Thanked 4,069 Times in 1,403 Posts
Ðề: Tổng hợp nghiên cứu Thiên Long Bát Bộ
1. Hướng dẫn Unpack file *.axp trong Client
Phần mềm cần thiết: AXP UNPACK - [Only registered and activated users can see links. ]
Download về giải nén và mở phần mềm lên, theo dõi hình ảnh.
[Only registered and activated users can see links. ]
[Only registered and activated users can see links. ]
[Only registered and activated users can see links. ]
[Only registered and activated users can see links. ]
Đây chỉ là ví dụ mình lấy file PetAttrTable.txt ở trong file Config.axp ra thôi, trong này còn nhiều file cần lôi ra lắm, cách thức tương tự nhé.
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é!
-
The Following 19 Users Say Thank You to Sói Đẹp Trai For This Useful Post:
0241618026 (23-02-20), akiem9x (22-08-13), athecang (06-06-15), choang123 (11-04-16), daohuutuan (21-07-15), dinhdtd (05-12-19), haist (24-08-13), hoanggiakhoa94 (21-08-13), ironhide (25-08-13), javia (16-10-16), laemdo0705 (12-04-15), Nhantac (18-10-21), nhokga (24-07-14), pak_yuna (22-08-13), tanhn (26-08-13), thanhluan12a14 (22-08-13), v0d1chs01 (23-02-14), vandunghhnd93 (23-08-13), __Han_Je_Soo__ (15-02-14)
-
21-08-13, 07:27 PM #3
- Ngày tham gia
- Apr 2011
- Đang ở
- 地獄
- Bài viết
- 3,991
- Thanks
- 369
- Thanked 4,069 Times in 1,403 Posts
Ðề: Tổng hợp nghiên cứu Thiên Long Bát Bộ
2. Hướng dẫn việt hóa Server
A. Hướng dẫn hiển thị Font china bằng notepad++:
Notepad++:[Only registered and activated users can see links. ]
[Only registered and activated users can see links. ]
[Only registered and activated users can see links. ]
[Only registered and activated users can see links. ]
B. Hướng dẫn sử dụng Chinest Convert Pro:
Phần mềm cần thiết: Chinest Convert Pro - [Only registered and activated users can see links. ]
Download về giải nén và mở phần mềm lên, theo dõi hình ảnh.
*> Dịch trực tiếp:
[Only registered and activated users can see links. ]
[Only registered and activated users can see links. ]
[Only registered and activated users can see links. ]
[Only registered and activated users can see links. ]
=> Cách này trâu bò, paste từng từ một vào dịch...
*> Dịch tự động ( Chỉ áp dụng cho các file dạng bảng )
[Only registered and activated users can see links. ]
[Only registered and activated users can see links. ]
[Only registered and activated users can see links. ]
[Only registered and activated users can see links. ]
[Only registered and activated users can see links. ]
[Only registered and activated users can see links. ]
=> Cách này nhanh nhưng có 1 nhược điểm là tất cả chữ hoa về hết chữ thường... Đây mới chỉ là demo còn chi tiết sẽ nói kỹ ở phần Excel
C. Giới thiệu Excel và công dụng cần thiết
Excel các bạn cài qua đĩa Office hoặc tìm link trên mạng.
Với Excel thì các bạn add tool hỗ trợ sau vào ( Hỗ trợ hàm viết hoa tất cả các chữ cái đầu từ Unicode )
[Only registered and activated users can see links. ] và bỏ nó vào 1 folder ví dụ của mình là D:\excel.
Mở Excel lên và làm như sau để add tool
[Only registered and activated users can see links. ]
[Only registered and activated users can see links. ]
[Only registered and activated users can see links. ]
Các hàm cơ bản cần dùng trong quá trình việt hóa:
Hàm xóa các ký tự trống thừa ( ví dụ 2 dấu cách lièn nhau ): =TRIM(ĐC_ô)
Hàm viết hoa các chữ đầu dòng ( ví dụ: Là loại thảo dược vị ngọt, cay... ): =Upper(Left(ĐC_ô))&Mid(ĐC_ô,2,len(ĐC_ô))
Hàm viết hoa tất cả các chữ cái đầu mỗi từ dùng cho tên riêng ( Ví dụ: Thôi Phùng Cửu: =ProperUnicode(ĐC_ô)
Hàm copy từ bên trái sang N ký tự trong một ô nào đó: =Left(ĐC_ô,N)
Ví dụ ô A2="abcxyz" và ta có hàm =Left(A2,3) => Kết quả trả ra sẽ là "abc"
Lệnh điều kiện: =If(BT_logic,GT đúng,GT sai). Cái này sẽ nói rõ ở phần mẹo edit file PetAttrTable.txt khi dịch tự động
Toán tử cộng chuỗi: =Chuỗi_1&Chuỗi2. Có thể ví dụ đơn giản. Ô A2="clbgames" và ô B2="vn", ta gõ hàm cộng chuỗi =A2&B2 => Kết quả trả ra sẽ là "clbgamesvn"
Tách lấy phần giá trị của một cột nào đó ( Chỉ lấy giá trị ô không lấy hàm ). Đơn giản là khi ta dùng hàm thì excel nó sẽ lưu dưới dạng Giá trị + hàm đại diện đã dùng. Trường hợp này ta không cần đến hàm, chỉ cần giá trị...
Trước tiên ta bôi đen cả cái cột cần copy bằng cách ấn chuột phải vào tên chữ cái đại diện cho cột ví dụ C, chọn Copy và làm tiếp theo hình...
[Only registered and activated users can see links. ]
[Only registered and activated users can see links. ]
Nếu ai chưa từng động đến excel thì cái này giải thích rất khó hiểu... Làm nhiều sẽ thành quen...
a>Các file dạng bảng cần việt hóa dạng bảng:
Ở Server: tlbb/Public/Config gồm các file
MonsterAttrTable.txt ( tên quái ), PetAttrTable.txt ( tên pet ), CommonItem.txt ( Tên vật phẩm ), Equipbase.txt ( tên trang bị ), tất cả các file *Mission.txt ( tên nhiệm vụ ), GemInfo.txt ( thông tin ngọc ),
Ở Client: Chỉ cần dịch ở SV và copy vào client mấy file trên. Ngoài ra ở client còn có: SkillData_V1.txt ( Tên skill ), SkillTemplate_V1.txt ( Thông tin skill ) Tất cả ở trong file Config.axp
Cách giải mã một số file bị mã hóa:
Cần có: txt_decode made by huuduyen_05: [Only registered and activated users can see links. ]
[Only registered and activated users can see links. ]
[Only registered and activated users can see links. ]
[Only registered and activated users can see links. ]
[Only registered and activated users can see links. ]
b> Mẹo nhỏ trong việt hóa file PetAttrTable.txt ( Một số nhỏ trong MonsterAttrTable.txt tương tự )
[Only registered and activated users can see links. ]
[Only registered and activated users can see links. ]
[Only registered and activated users can see links. ]
[Only registered and activated users can see links. ]
[Only registered and activated users can see links. ]
[Only registered and activated users can see links. ]
[Only registered and activated users can see links. ]
[Only registered and activated users can see links. ]
[Only registered and activated users can see links. ]
[Only registered and activated users can see links. ]
[Only registered and activated users can see links. ]
[Only registered and activated users can see links. ]
[Only registered and activated users can see links. ]
Lưu ý đây là FONT UNICODE nên phải convert về VISCII ( Dùng Unikey để convert ) thì SV và Client mới đọc được.
D. Việt hóa các file không phải dạng bảng:
Những file này thường là các file script NPC hoặc script event. Không có cách nào khác ngoài copy từng dòng và Paste vào Chinest Convert Pro và dịch. Tất nhiên nhiều chỗ nó dịch rất khó nghe nên phải đau đầu một chút để dịch lại sao cho êm tai. Khó lắm chứ chẳng dễ dàng gì đâu.
Thông tin các file cần việt hóa:
Tại Server:
+ Thông báo sự kiện hệ thống: tlbb/Public/Config/ActivityNotice.txt
+ Tên, danh hiệu của NPC trong tất cả các map: Quy định ở các file có dạng *_monster.ini, ví dụ ở Đại Lý là dali_monster.ini. Tất cả các file này nằm ở tlbb/Public/Scene.
+ Script của phần lớn các NPC chức năng thông dụng: tlbb/Public/Data/Script/obj
+ Script của các event và một số NPC còn lại chức năng event: tlbb/Public/Data/Script/event.
+ Một số khác: Nằm ngoài 2 folder này, nó ở trong folder lớntlbb/Public/Data/Script gồm các folder khác: MyNew, New, shengsi, xiulian,... ( Của SV 3.0 )
Tại Client:
+ File quan trọng nhất và cũng khó dịch nhất và cũng dài khủng khiếp nhất: StrDictionary.txt ở file Config.axp. File này thường lôi của FPT về xài nhưng mà do nó bị mã hóa mà mình lại muốn chỉnh sửa lại một số thông tin nên ta sẽ tiến hành giải mã trước ( Đã post bên trên ), rồi sửa bình thường. Chú ý với các file dạng dòng, cột thì đều có dòng đầu tiên là dòng quy định phạm vi của cột đó ( STRING => Chuỗi, INT => Số nguyên, FLOAT => Số thực ) và chữ hoa với chữ thường khác hẳn nhau.
+ File hiển thị tên Scene: SceneDefineEx.txt trong file Config.axp
+ File hiển thị thông tin hiệu ứng buff: ImpactSEData_V1.txt ở file Config.axp
+ File hiển thị danh hiệu pet: PetTitle.txt ở file Config.axp
+ File Tiên nhân chỉ lộ: AutoSearch.txt ở file Config.axp
+ Các file hiển thị nhiệm vụ: Tất cả các file có từ Mission_*.txt ở file Config.axp, ví dụ Mission_Delivery.txt
+ File tên đồ chế: ItemCompound.txt ở file Config.axp
+ Danh hiệu: CharTitle.txt ở file Config.axp
+ Các file khác: Equipbase.txt, CommonItem.txt, GemInfo.txt thì khuyến khích dịch ở trong SV rồi copy vào Client, lúc đó sẽ không có tình trạng lệch ID.
+ Việt hóa hiển thị shop KNB: Nằm ở file Interface.axp và địa chỉ trong folder YuanbaoShop/YuanbaoShop.lua
Lưu ý đây là các file không phải dạng bảng hoặc cũng là dạng bảng nhưng không cần thiết xài đến Excel. Còn các file cần thiết đến Excel đã post bên trên mục Các file dạng bảng
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é!
-
The Following 21 Users Say Thank You to Sói Đẹp Trai For This Useful Post:
0241618026 (23-02-20), 981872 (31-07-14), dinhdtd (05-12-19), haist (24-08-13), hoanggiakhoa94 (21-08-13), javia (16-10-16), laemdo0705 (12-04-15), lexuanbach (23-08-13), manhha511 (29-08-14), minhchau0309 (21-08-13), nguyentuantd (21-08-13), nhokga (24-07-14), pak_yuna (22-08-13), pebu5201314 (21-08-13), tanhn (26-08-13), thanhluan12a14 (22-08-13), Tuan565 (21-08-13), v0d1chs01 (23-02-14), vandunghhnd93 (23-08-13), zimbeo (06-11-14), __Han_Je_Soo__ (15-02-14)
-
21-08-13, 10:28 PM #4
- Ngày tham gia
- Apr 2011
- Đang ở
- 地獄
- Bài viết
- 3,991
- Thanks
- 369
- Thanked 4,069 Times in 1,403 Posts
Ðề: Tổng hợp nghiên cứu Thiên Long Bát Bộ
3. Script và đường dẫn:
-Script: Hiểu nôm na gọi là code phục vụ cho một sự kiện hoặc NPC hoặc item nào đó. Nói đến script là nói đến code và lập trình, nên phần này rất ít người ưa nó.
- Đường dẫn: Đường dẫn tới các Script quy định trong file Script.dat ở trong Server với đường dẫn tlbb/Public/Data. Cấu trúc file này hoàn toàn dễ hiểu, mở bằng notepad nó sẽ như sau:
[Only registered and activated users can see links. ]
Toàn số là ID của Script, bên cạnh là đường dẫn. Vì tất cả các file Script đều nằm trong tlbb/Public/Data/Script nên ta chỉ cần khai báo cái folder con ở bên trong tính từ folder mẹ tên Script.
Vì vậy để khai báo một Script mới với ID X nào đó ( Điều kiện là X chưa từng tồn tại trong file này để tránh lặp ID ), ta cũng khai báo như nguyên mẫu cấu trúc trên.
Có một nhận xét mà game nào cũng như vậy đó là các Script đều có định dạng *.lua, nên cũng đừng ngỡ ngàng rằng tại sao các file kia toàn là file *.lua hếtKhá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é!
-
The Following 15 Users Say Thank You to Sói Đẹp Trai For This Useful Post:
981872 (31-07-14), athecang (06-06-15), chuthikji (22-08-13), dinhdtd (05-12-19), haist (24-08-13), javia (16-10-16), laemdo0705 (12-04-15), nhokga (24-07-14), pak_yuna (22-08-13), tanhn (26-08-13), thanhluan12a14 (22-08-13), v0d1chs01 (23-02-14), vandunghhnd93 (23-08-13), vuhuy99v (27-12-15), __Han_Je_Soo__ (15-02-14)
-
22-08-13, 05:55 PM #5
- Ngày tham gia
- Apr 2011
- Đang ở
- 地獄
- Bài viết
- 3,991
- Thanks
- 369
- Thanked 4,069 Times in 1,403 Posts
Ðề: Tổng hợp nghiên cứu Thiên Long Bát Bộ
4. Các vấn đề liên quan đến code ( Dành cho người đam mê lập trình )
Ở phần này mình sẽ tổng hợp thế nào là code và cách để viết được một đoạn code đơn giản.
Trước tiên, ta cần hiểu code là gì?
- Bạn muốn NPC hoạt động, bạn muốn NPC thực hiện một chức năng mà mình mong muốn?
- Bạn có bao giờ đặt câu hỏi rằng tại sao NPC hệ thống tạo sẵn lại có một số chức năng như vậy?
- Câu trả lời là các chức năng đó không tự nó mà sinh ra, nó do người lập trình viên code nên dựa trên các hàm cơ sở đã được xây dựng sẵn.
- Thực tế cũng vậy, một phần mềm không thể tự nó sinh ra được mà phải nhờ quá trình vất vả cày cuốc của những người viết nên phần mềm đóLua có phải ngôn ngữ lập trình không?
- Câu trả lời là không phải. Nó chỉ là tổ hợp các hàm được xây dựng sẵn theo một cấu trúc nhất định ứng với một game riêng biệt nào đó ( tạm gọi là Môi trường ).
- Lua quy định các script của một game bất kỳ nào đó.
Lỗi script?
Chắc hẳn bạn đã gặp phải tình trạng khi ấn vào NPC không chạy, cụ thể là nó không thực hiện chức năng như mong muốn. ( Lỗi này sẽ xảy ra nếu bạn là người code lên script đó )
Script không hoạt động có 2 nguyên nhân
- Chưa khai báo địa chỉ script tại Script.dat ( Xem bên trên )
- Script code bị lỗi nào đó.Nhận diện lỗi Script
Rất khó phát hiện lỗi, chỉ có đọc lại code và xem kỹ xem có đoạn nào không ổn, thừa thiếu ký tự nào không.
Có thể mở bảng ghi lỗi ra xem ( Cái này mình không hay sử dụng )
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é!
-
The Following 14 Users Say Thank You to Sói Đẹp Trai For This Useful Post:
dinhdtd (05-12-19), haist (24-08-13), javia (16-10-16), laemdo0705 (12-04-15), nguyedi123 (19-07-14), nhokga (24-07-14), pak_yuna (22-08-13), tanhn (26-08-13), thanhluan12a14 (22-08-13), Tuan565 (22-08-13), v0d1chs01 (23-02-14), vandunghhnd93 (23-08-13), vuhuy99v (27-12-15), __Han_Je_Soo__ (15-02-14)
-
22-08-13, 06:16 PM #6
- Ngày tham gia
- Apr 2011
- Đang ở
- 地獄
- Bài viết
- 3,991
- Thanks
- 369
- Thanked 4,069 Times in 1,403 Posts
Ðề: Tổng hợp nghiên cứu Thiên Long Bát Bộ
5. Cách thức để code một script đơn giản
Định dạng script:
- Không cần nói chắc ai cũng biết script có định dạng *.lua ( Với * là một tên bất kỳ, ví dụ hienvien_habaongoc.lua và tên không có dấu cách )Cấu trúc của một code đơn giản:
Hàm hay Chương trình con là một bộ phận quan trọng trong một chương trình nào đó. Thay vì tất cả gộp vào một chương trình chính, ta phân nhỏ ra để dễ dàng soát lỗi ( Thuật chia để trị )
Gồm có 2 phần chính
- Phần hàm mặc định ( function ) ứng với chức năng của từng loại NPC ( NPC chức năng, Monster, Item,... )
- Phần hàm phụ, do ta thêm vào phục vụ cho nhiều mục đích khác ( Tạm gọi là Chương trình con )Khai báo hàm:
Trước tiên cấu trúc của một hàm như sau:
function xScript_ID_Tên_Hàm(sceneId,selfId,Tham_Biến_1, Tham_Biến_2,...)
Trong đó xScript_ID bao gồm x + ID của script ví dụ x900020. Cần khai báo vậy để phân biệt với các tham biến sẽ sử dụng trong chương trình đó ( sẽ nói sau )
Với hàm mặc định đa số ở phần này ta sẽ dựa vào các hàm có sẵn của game để học tập cách khai báo, các tham biến, tham số cần có.
Ví dụ một hàm mà mình nghĩ sử dụng thường xuyên trong code của NPC đó là hàm OnDefaultEvent.
Cấu trúc hàm này lấy nguyên của hệ thống nhé:
function xID_Script_OnDefaultEvent(sceneId,selfId,targetId)
Tham biến: sceneId là ID của map tương ứng, selfId là ID của NPC, targetId là ID của mục tiêu
Với các hàm phụ, ta cũng dùng cách khai báo như đã hướng dẫn ở trên, có điều tên có thể đặt khác.
Ví dụ một hàm đơn giản:
function x900020_OnCheck(sceneId,selfId)
sceneId và selfId là 2 tham biến được sử dụng rất nhiều nên cần thiết khai báo ngay vào trong các tham biến sử dụng của hàm...Khai báo các biến:
Ta sẽ tách riêng làm phần khai báo biến toàn chương trình ( biến toàn cục ) và khai báo riêng một biến trong hàm ( biến địa phương )
Biến toàn cục: Là biến có tác dụng trong toàn bộ chương trình đó và không được phép đặt tên một biến khác tương tự ở trong các hàm.
Cấu trúc: xID_Script_g_Tên_Biến = Giá_Trị
Không biết có bạn nào thắc mắc phải đặt chữ x ở đầu không? Câu trả lời sẽ rõ khi bạn edit bằng Notepad++ và nhìn rõ xem cái cụm đó nếu bỏ chữ x đi thì nó sẽ có màu gì, vào game kiểm chứng xem thế nào.
Thống nhất khai báo giống với cách khai báo của hệ thống nhé.
Ví dụ x900020_g_ScriptId = 900020
Biến địa phương: Là biến chỉ có tác dụng trong một hàm xác định nào đó, các hàm khác không có tác dụng.
Cấu trúc: local Tên_Biến = Giá_Trị
Lưu ý là trong cùng một hàm cũng không được phép khai báo các biến cùng tên.
Ví dụ:
local nam = LuaFnGetName()
Một chú ý nho nhỏ là mỗi khi kết thúc một hàm nào đó ta để có khóa end
Tổng hợp lại cấu trúc của một hàm sẽ là:
function xScriptID_Tên_Hàm(sceneId,selfId,Tham_Biến_1,T ham_Biến_2,...)
<Các lệnh>
endLời gọi hàm
Hàm có thể được gọi ở bất kỳ đâu trong một hàm khác với cấu trúc:
xScriptID_Tên_Hàm(sceneId,selfId,Tham_Biến_1,T ham_Biến_2,...) Cái này phải giống với khai báo hàm nhé, giống thì mới gọi hàm được chứ.
Ví dụ muốn gọi một hàm tên x900020_OnCheck(sceneId,selfId) thì ta chỉ việc gọi nó bằng chính tên hàm đó:
x900020_OnCheck(sceneId,selfId)
Ngoài ra còn có một chức năng mình cho là rất thú vị đó là gọi hàm từ các file Script khác đã có sẵn
Cấu trúc:
CallScriptFunction( (ID_Script_Hàm_Cần_Gọi), "Tên_Hàm", sceneId, selfId,Tham_Biến_1,Tham_Biến_2,...)
Ví dụ một hàm dịch chuyển qua map:
CallScriptFunction( (400900), "TransferFunc", sceneId, selfId,47,35,67)
Trên đây mới chỉ là khái niệm về mặt lý thuyết sơ qua, còn để code được một Script hoàn chỉnh ta còn cần tìm hiểu về các lệnh được xây dựng sẵn nữa.
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é!
-
The Following 15 Users Say Thank You to Sói Đẹp Trai For This Useful Post:
athecang (06-06-15), dinhdtd (05-12-19), haist (24-08-13), huynhnv1994 (01-08-24), javia (16-10-16), laemdo0705 (12-04-15), nhokga (24-07-14), pak_yuna (22-08-13), tanhn (26-08-13), thanhluan12a14 (22-08-13), Tuan565 (22-08-13), v0d1chs01 (23-02-14), vandunghhnd93 (23-08-13), vuhuy99v (27-12-15), __Han_Je_Soo__ (15-02-14)
-
22-08-13, 06:47 PM #7
- Ngày tham gia
- Apr 2011
- Đang ở
- 地獄
- Bài viết
- 3,991
- Thanks
- 369
- Thanked 4,069 Times in 1,403 Posts
Ðề: Tổng hợp nghiên cứu Thiên Long Bát Bộ
6. Tổng hợp các lệnh và hàm cơ bản
Điều kiện
Cần có các công cụ để code nhưng khuyên dùng Notepad++ nó sẽ có nhiều chức năng trong đó chức năng tự động tô màu khóa sẽ giúp ta rất nhiều trong quá trình tìm và soát lỗi.Đặt chú thích:
Chỉ cần thêm dấu -- ở đầu dòng là dòng đó tự hiểu là chú thíchLệnh viết ra bảng
BeginEvent(sceneId)
AddText(sceneId,"Ký tự cần viết")
EndEvent(sceneId)
DispatchEventList(sceneId,selfId,targetId)
Lệnh viết ra các mục
BeginEvent(sceneId)
AddNumText(sceneId,Script_ID,"Ký tự cần viết",Số_hiển_thị, Số_đại_diện)
EndEvent(sceneId)
DispatchEventList(sceneId,selfId,targetId)
Trong đó Số_hiển_thị là ID của hình ảnh đại diện, có thể tham khảo hình bên dưới. Số_đại_diện là giá trị sau khi ấn vào cái mục này ( xem hình bên dưới ).
[Only registered and activated users can see links. ]
Và để minh họa rõ hơn về Số_đại_diện thì ta có ví dụ sau:
AddNumText(sceneId,900020,"Tập kích bất ngờ",10,100)
Trong đó 10 là ID của icon hình cái kiếm chéo đó.
100 là số đại diện của lệnh này. Ta cần thiết đến cái này để thực hiện các hàm chức năng bên dưới, khi người chơi ấn vào mục này.
Lệnh lấy Số đại diện
GetNumText()
Lưu ý đây là một giá trị dạng số nên phải gán cho một biến nào đó hoặc sử dụng trực tiếp luôn. Khác với biến nhé.
Ví dụ:
local key = GetNumText()Lệnh lấy tên NPC
GetName(sceneId,selfId)
Đây cũng là một giá trị dạng số nên cần phải gán cho một biếnLấy tên nhân vật
LuaFnGetName(sceneId,selfId)
Giá trị dạng số, cần gán cho biếnLấy level của nhân vật
GetLevel(sceneId,selfId)
Giá trị dạng số, cần gán cho biếnLệnh kiểm tra ô đạo cụ
LuaFnGetPropertyBagSpace(sceneId,selfId)
Hàm trả về giá trị ứng với số ô trống trong ô Đạo Cụ.
Giá trị dạng số, cần gán cho biếnHàm kiểm tra một item nào đó có trong túi hay không, hàm trả về giá trị 0 nếu không có và trả về giá trị > 0 ứng với số lượng item đó mà người chơi có
LuaFnGetAvailableItemCount(sceneId,selfId,ID_Item)
Giá trị dạng số, cần gán cho biếnHàm xóa item
LuaFnDelAvailableItem(sceneId,selfId,ID_Item,Số_ lượng)
Hàm này cũng trả về giá trị dạng số song không cần gán cho biến cũng không ảnh hưởng gì cả.Hàm add kinh nghiệm, điểm tặng, ngân lượng
Kinh nghiệm:
LuaFnAddExp(sceneId,selfId,Số_lượng)
Vàng:
AddMoney(sceneId,selfId,Số_lượng)
Số_lượng đơn vị là Đồng, muốn chuyển sang vàng thì đem số đó chia cho 100 là xong.
KNB:
YuanBao(sceneId,selfId,targetId,x,y)
Với x là số lượng cần add và y là giá trị KNB
Điểm tặng:
ZengDian(sceneId,selfId,targetId,x,y)
Tương tự KNBAdd Item cho nhân vật
BeginAddItem(sceneId)
AddItem( sceneId,ID_Item,Số_lượng)
EndAddItem(sceneId,selfId)
AddItemListToHuman(sceneId,selfId)
Set Level cho nhân vật
SetLevel(sceneId,selfId,Level)
Gia nhập môn phái
LuaFnJoinMenpai(sceneId,selfId, targetId,ID_Môn_Phái)
Với ID_Môn_Phái là ID tương ứng của môn phái ~0 -> 9
Kèm theo đó có hàm Add tâm pháp
LuaFnSetXinFaLevel(sceneId,selfId,x,y)
Với x là ID quyển tâm pháp và y là cấp bậc tâm pháp của quyển đóGhi ra kênh hệ thống
BroadMsgByChatPipe(sceneId,selfId,"Ký tự cần ghi")
Cấu trúc lệnh rẽ nhánh
if Điều_Kiện then Thực_Hiện_Lệnh
end
Đây là lệnh rẽ nhánh đơn tức là chỉ có một lần kiểm tra. Còn muốn thực hiện nhiều kiểm tra ví dụ kiểm tra GetNumText() chẳng hạn, ta sẽ dùng đến
elseif và else
if Điều_Kiện then Thực_Hiện_Lệnh
elseif Điều_Kiện then Thực_Hiện_Lệnh
else Thực_Hiện_Lệnh
end
Đây chỉ là cấu trúc, còn muốn bao nhiêu elseif cũng được nhưng chỉ có 1 if và 1 else trong cụm lệnh if elseif else end mà thôi. Có thể không cần có else
Ngoài ra còn có các phép hợp nhiều điều kiện phải cùng thỏa mãn ( and ) hoặc chỉ cần 1 điều kiện thỏa mãn ( or )
Cấu trúc như trên, muốn gộp 2 điều kiện thì ta chỉ việc viết với cấu trúc
Điều_Kiện_1 and Điều_Kiện_2
Gộp N điều kiện thì có N-1 phép and hoặc or tương ứng. Tuân thủ đúng theo quy tắc dấu ngoặc trong toán học về độ ưu tiên.
Toán tử so sánh:
Lớn hơn: >
Lớn hơn hoặc bằng: >=
Nhỏ hơn: <
Nhỏ hơn hoặc bằng: <=
Bằng: ==
Khác: ~=
Phép gán: Biến_A = Biến_B
Ví dụ:
if GetNumText() == 1 then
BeginEvent(sceneId)
AddText(sceneId,"Num text = 1")
EndEvent(sceneId)
DispatchEventList(sceneId,selfId,targetId)
elseif GetNumText() == 2 then
BeginEvent(sceneId)
AddText(sceneId,"Num text = 2")
EndEvent(sceneId)
DispatchEventList(sceneId,selfId,targetId)
else
BeginEvent(sceneId)
AddText(sceneId,"Num text = 3")
EndEvent(sceneId)
DispatchEventList(sceneId,selfId,targetId)
end
Vòng lặp for
for Biến_Chạy, Giá_Trị_Lặp do
<Thực hiện lệnh>
end
Biến_Chạy là biến đặc trưng dùng trong vòng lặp, thường là biến i. Giá_Trị_Lặp là giá trị mà khi biến_chạy bằng nó, vòng lặp sẽ kết thúc.
Mỗi bước lặp i sẽ tăng thêm 1 đơn vị. Vòng lặp dừng lại khi i=Giá_Trị_LặpKhá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é!
-
The Following 13 Users Say Thank You to Sói Đẹp Trai For This Useful Post:
athecang (06-06-15), dinhdtd (05-12-19), haist (24-08-13), javia (16-10-16), laemdo0705 (12-04-15), nhokga (24-07-14), pak_yuna (23-08-13), tanhn (26-08-13), thanhluan12a14 (22-08-13), v0d1chs01 (23-02-14), vandunghhnd93 (23-08-13), vuhuy99v (27-12-15), __Han_Je_Soo__ (15-02-14)
-
22-08-13, 08:08 PM #8
- Ngày tham gia
- Apr 2011
- Đang ở
- 地獄
- Bài viết
- 3,991
- Thanks
- 369
- Thanked 4,069 Times in 1,403 Posts
Ðề: Tổng hợp nghiên cứu Thiên Long Bát Bộ
7. Các lệnh và hàm nâng cao
Phần này rất trìu tượng nên ai đọc một lần không hiểu thì cũng là bình thường. Đọc đi đọc lại dần dần sẽ hiểu thôi.
Lấy giá trị của một biến trong hàm
local Biến_1,Biến_2,... = xIDScript_Tên_Hàm(sceneId,selfId,Tham_Biến_1,T ham_Biến_2,...)
Trong hàm đó thì ta vẫn thực hiện các lệnh bình thường, nhưng khi hàm kết thúc sẽ có lệnh return và trả về giá trị là các biến cần thiết đã gọi tới hàm đó.
Ví dụ:
Lời gọi hàm: local ret,msg = x900011_CheckAccept(sceneId,selfId,targetId)
Hàm:
function x900011_CheckAccept( sceneId, selfId, targetId )
if LuaFnHasTeam(sceneId,selfId) ~= 1 then
return 0, "Các hạ cần có một tổ đội."
end
Thì sau lời gọi hàm này, giá trị biến ret = 0; msg = "Các hạ cần có một tổ đội."
Lệnh return có tác dụng dừng hàm ngay tại đó và trả về giá trị.Lệnh dịch chuyển qua một map nào đó
CallScriptFunction((400900),"TransferFunc",sceneId ,selfId,ID_Map,Pos_X,Pos_Y)
Hàm này là dịch chuyển thông thường nghĩa là khi chơi online thì mọi người sẽ cùng dịch vào một map... Nói rõ để phân biệt với hàm Copy Scene bên dưới là chỉ có tổ đội của bạn tiến vào map đó thôi.
Hàm này load các file *_monster.ini đã có sẵn trong tlbb/Public/Scene, còn Copy Scene muốn nó load file nào mình sẽ khai báo tên file đó. Chi tiết xem phần hàm Copy SceneHàm Copy Scene ( Dùng để tạo phụ bản )
--**********************************
--On Accept--
--**********************************
function x900011_OnAccept( sceneId, selfId, targetId )
end
--**********************************
--On Abandon--
--**********************************
function x900011_OnAbandon( sceneId, selfId )
end
--**********************************
--Make Copy Scene--
--**********************************
function x900011_MakeCopyScene( sceneId, selfId, nearmembercount )
local mylevel = 120
local iniLevel=120
leaderguid=LuaFnObjId2Guid(sceneId,selfId)
LuaFnSetSceneLoad_Map(sceneId, "Tên_Map.nav");
LuaFnSetCopySceneData_TeamLeader(sceneId, leaderguid);
LuaFnSetCopySceneData_NoUserCloseTime(sceneId,5);
LuaFnSetCopySceneData_Timer(sceneId, Thời_gian);
LuaFnSetCopySceneData_Param(sceneId, 0,Type_Loại_Map);--Quy định map PK hay map Quest
LuaFnSetCopySceneData_Param(sceneId, 1, ScriptId);
LuaFnSetCopySceneData_Param(sceneId, 2, 0);
LuaFnSetCopySceneData_Param(sceneId, 3, -1);
LuaFnSetCopySceneData_Param(sceneId, 4, 0);
LuaFnSetCopySceneData_Param(sceneId, 5, 0);
LuaFnSetCopySceneData_Param(sceneId, 6, GetTeamId(sceneId,selfId)); --ID team
LuaFnSetCopySceneData_Param(sceneId, 7, 0) ;
LuaFnSetCopySceneData_PvpRuler( sceneId, 9 )
local x,z = GetWorldPos( sceneId, selfId )
LuaFnSetSceneLoad_Monster( sceneId, "*_monster.ini" )--Đây là tên file monster của map đó
local CopyScene_LevelGap = 31
LuaFnSetCopySceneData_Param(sceneId, CopyScene_LevelGap, mylevel - iniLevel)
local bRetSceneID = LuaFnCreateCopyScene(sceneId);
BeginEvent(sceneId)
if bRetSceneID>0 then
AddText(sceneId,"Tiến vào phụ bản thành công!");
else
AddText(sceneId,"Số lượng phụ bản đã quá tải.");
end
EndEvent(sceneId)
DispatchMissionTips(sceneId,selfId)
end
--*********************************
--On Continue--
--**********************************
function x900011_OnContinue( sceneId, selfId, targetId )
end
--**********************************
--Check Submit--
--**********************************
function x900011_CheckSubmit( sceneId, selfId )
end
--**********************************
--On Submit--
--**********************************
function x900011_OnSubmit( sceneId, selfId, targetId, selectRadioId )
end
--*********************************
--On Enter Zone--
--**********************************
function x900011_OnEnterZone( sceneId, selfId, zoneId )
end
--**********************************
--On Copy Scene Ready--
--**********************************
function x900011_OnCopySceneReady( sceneId, destsceneId )
LuaFnSetCopySceneData_Param(destsceneId, 3, sceneId);
leaderguid = LuaFnGetCopySceneData_TeamLeader(destsceneId) ;
leaderObjId = LuaFnGuid2ObjId(sceneId,leaderguid);
NewWorld( sceneId,leaderObjId, destsceneId,Tọa_Độ_X_khi_tiến_vào,Tọa_Độ_Y_khi_tiến_vào)
local nearmembercount = GetNearTeamCount( sceneId, leaderObjId )
local member
local misIndex
for i=0, nearmembercount-1 do
member = GetNearTeamMember( sceneId, leaderObjId, i )
if LuaFnIsCanDoScriptLogic( sceneId, member ) == 1 then
NewWorld( sceneId, member, destsceneId,Tọa_Độ_X_khi_tiến_vào,Tọa_Độ_Y_khi_tiến_vào)
end
end
end
--**********************************
--On Player Enter--
--**********************************
function x900011_OnPlayerEnter( sceneId, selfId )
end
--**********************************
--On Human Die--
--**********************************
function x900011_OnHumanDie( sceneId, selfId, killerId )
endLệnh gọi Monster
Monster có thể là quái bình thường, NPC hay BOSS tùy thuộc vào câu lệnh và thuộc tính của Monster tương ứng.
local MstId = LuaFnCreateMonster(sceneId,ID_Monster,Tọa_độ_ X,Tọa_độ_Y,Type,AIScript,Script_Monster)
Với Type là loại hình chiến đấu của Monster. Số 0 ứng với NPC ( tất nhiên hình thức của monster đó phải là NPC mới có tác dụng còn quái thì không thể biến thành NPC được ). AIScript là Script AI của monster đó ( Trường hợp là NPC thì không cần quan tâm ) - tham khảo tlbb/Public/Data/AIScript. Còn Script_Monster là kịch bản của ta viết cho Monster này ( Thường là kịch bản chiến đấu và kèm theo đó là hàm Ondie khi monster đó chết đi )
Lưu ý là hàm này Creat quái thì sẽ ra quái còn Creat NPC thì sẽ ra NPC, không có kiểu creat quái lại ra type của NPC và ngược lại.
Monster sau khi creat ra sẽ lấy Script với ID là giá trị của biến Script_Monster làm kịch bản
Trường hợp Creat NPC ta có mẫu sau:
local MstId = LuaFnCreateMonster(sceneId,Monster_Id,posX, posY,3,0,Script_Monster);
SetMonsterFightWithNpcFlag( sceneId, MstId, 0 )
Monster này sau khi creat ra sẽ có chữ màu xanh và là một NPC thực thụ.Lệnh set tên và danh hiệu cho Monster
Chỉ có tác dụng sau lệnh Creat monster ( bên trên đã nói )
SetCharacterTitle(sceneId,MstId,"Danh hiệu")
SetCharacterName(sceneId,MstId,"Tên Monster")
Với MstId là giá trị trả về sau lệnh LuaFnCreateMonster(sceneId,ID_Monster,Tọa_độ_ X,Tọa_độ_Y,Type,AIScript,Script_Monster)Lệnh Delete Monster
Xóa 1 monster với ID là Monster_Id nào đó.
local nMonsterNum = GetMonsterCount(sceneId)
local Monsters = Monster_Id
for i=0, nMonsterNum-1 do
local MonsterId = GetMonsterObjID(sceneId,i)
if Monsters == GetMonsterDataID( sceneId, MonsterId ) then
LuaFnSendSpecificImpactToUnit(sceneId, MonsterId, MonsterId, MonsterId, 152, 0)
SetCharacterDieTime( sceneId, MonsterId, 1000 )
end
end
Thuật toán thì rất đơn sơ và dễ hiểu.Hàm Ondie
function xIDScript_OnDie(sceneId,selfId,killerId)
<Thực hiện lệnh>
end
Hàm này tự tác dụng khi một Monster với Script tương ứng chết đi.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é!
-
The Following 14 Users Say Thank You to Sói Đẹp Trai For This Useful Post:
dinhdtd (05-12-19), haist (24-08-13), hofp272 (16-08-14), javia (16-10-16), laemdo0705 (12-04-15), nhokga (24-07-14), pak_yuna (23-08-13), tanhn (26-08-13), thanhluan12a14 (22-08-13), tienanhlxag (26-08-13), v0d1chs01 (23-02-14), vandunghhnd93 (23-08-13), vuhuy99v (27-12-15), __Han_Je_Soo__ (15-02-14)
-
22-08-13, 08:43 PM #9
- Ngày tham gia
- Apr 2011
- Đang ở
- 地獄
- Bài viết
- 3,991
- Thanks
- 369
- Thanked 4,069 Times in 1,403 Posts
Ðề: Tổng hợp nghiên cứu Thiên Long Bát Bộ
Đây là tất cả những gì mình biết và tìm hiểu lâu nay, chính nhờ những cái này mình đã code được event Trung Thu và Hiên Viên Các đã share ở 2 topic này
[Only registered and activated users can see links. ]
[Only registered and activated users can see links. ]
Công mình tìm hiểu mình tổng hợp lại đây, ai có ý định tập code thì có thể dựa theo event này.
Kiến thức của mình còn hạn hẹp nên còn tìm hiểu thêm nữa, như mình đã nói ở đầu tiên là mình chỉ tổng hợp một số cái thôi, còn phát triển nó là ở các bạn. Ai đam mê thì chắc chắn sẽ thành công!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é!
-
The Following 33 Users Say Thank You to Sói Đẹp Trai For This Useful Post:
anhbanchieu (23-11-15), ankol479 (22-08-13), Axjtaka (07-02-14), benny_quach (26-12-14), dinhdtd (05-12-19), dovantoi96 (30-12-14), dvphong09 (23-08-13), forgetpain (23-08-16), haist (24-08-13), hauhehe (10-02-18), hofp272 (16-08-14), javia (16-10-16), ken9x19 (31-08-13), l0v3l0v3who94 (31-08-13), laemdo0705 (12-04-15), lexuanbach (23-08-13), nhokga (24-07-14), pak_yuna (23-08-13), phiyeutuan08 (06-05-14), phongcamly1996 (04-08-19), qtm1578 (01-05-14), saodzi (25-11-18), tanhn (26-08-13), thanhluan12a14 (22-08-13), thienlan19 (07-01-15), v0d1chs01 (23-02-14), vandunghhnd93 (23-08-13), vuhuy99v (27-12-15), xuanphuong (08-06-19), YanBi (26-08-13), Yougame_100 (31-08-13), yuusen (19-04-15), __Han_Je_Soo__ (15-02-14)
Các Chủ đề tương tự
-
[KT] Tổng hợp tất cả mọi thứ cần thiết để cài đặt Kiếm Thế cho newbie
Bởi Sesshomaru trong diễn đàn ReleasesTrả lời: 3Bài viết cuối: 08-03-14, 06:33 PM -
[TLBB] Newbie cần hỏi 1 số điều về cài đặt Thiên Long Bát Bộ offline.
Bởi kotaro_166 trong diễn đàn Hỏi Đáp/ Yêu CầuTrả lời: 1Bài viết cuối: 06-01-13, 10:09 AM -
Bình chọn tách riêng BOX Thiên Long Bát Bộ !!!
Bởi Sói Đẹp Trai trong diễn đàn Hỏi Đáp/ Yêu CầuTrả lời: 40Bài viết cuối: 02-12-11, 07:26 PM -
cần mua 1 sv Thiên Long việt hóa từ 90%->100%
Bởi vn20495 trong diễn đàn Hỏi Đáp/ Yêu CầuTrả lời: 6Bài viết cuối: 16-07-10, 10:57 AM