[TLBB] Tổng hợp nghiên cứu Thiên Long Bát Bộ (Không dành cho Newbie)
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 9 của 9
  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,047 Times in 1,402 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ệnhhàm cơ bản
    7. Tổng hợp các hàm nâng cao, chuyên dùng cho viết event

    Xin phép mọi người stick nó lên cao, chắc sẽ có nhiều lợi ích cho ai muốn tìm hiểu các vấn đề liên quan khỏi lục lọi box mệt ra...

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

  2. The Following 45 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), 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)

  3. #2
    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,047 Times in 1,402 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é!

  4. 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)

  5. #3
    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,047 Times in 1,402 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ý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é!

  6. 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)

  7. #4
    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,047 Times in 1,402 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 codelậ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ết
    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é!

  8. 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)

  9. #5
    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,047 Times in 1,402 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 đó.
    Việc chính của ta là tìm hiểu code, các vấn đề liên quan. Vì lập trình thì nó mênh mông và rộng lớn lắm nên không thể trong một topic mà nói hết được, chỉ có cái gì tổng hợp được thì sẽ tổng hợp thôi. Còn phần nghiên cứu thì dựa vào các bạn là chính, mình chỉ là người khởi nguồn cho các bạn thôi.

    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 )
    Làm sao để code, các bạn tìm hiểu phần tiếp theo.
    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é!

  10. 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)

  11. #6
    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,047 Times in 1,402 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)
    sceneIdselfId 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>

    end
    Lờ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)
    Đương nhiên một chương trình thì phần lớn không thể một hàm mà ra được nên ta phải có hệ thống các hàm kết hợp với nhau.
    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é!

  12. The Following 14 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 (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)

  13. #7
    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,047 Times in 1,402 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ích
    Lệ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ến
    Lấy tên nhân vật

    LuaFnGetName(sceneId,selfId)

    Giá trị dạng số, cần gán cho biến
    Lấy level của nhân vật

    GetLevel(sceneId,selfId)

    Giá trị dạng số, cần gán cho biến
    Lệ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ến
    Hà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ến
    Hà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ự KNB
    Add 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

    elseifelse
    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 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ặp
    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é!

  14. 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)

  15. #8
    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,047 Times in 1,402 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 Scene
    Hà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 )
    end
    Lệ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 Typeloạ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 ). AIScriptScript 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 IDMonster_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é!

  16. 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)

  17. #9
    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,047 Times in 1,402 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 ThuHiê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é!

  18. 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ự

  1. Trả lời: 3
    Bài viết cuối: 08-03-14, 06:33 PM
  2. [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ầu
    Trả lời: 1
    Bài viết cuối: 06-01-13, 10:09 AM
  3. 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ầu
    Trả lời: 40
    Bài viết cuối: 02-12-11, 07:26 PM
  4. 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ầu
    Trả lời: 6
    Bài viết cuối: 16-07-10, 10:57 AM

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à 11:52 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ệ.