Cách sử dụng script macro căn bản

Thảo luận trong 'Võ Lâm Truyền Kỳ phiên bản 3D' bắt đầu bởi superkhung, 26/8/13.

  1. superkhung

    superkhung MadDog

    Tham gia ngày:
    10/5/05
    Bài viết:
    231
    Bái gốc mình post bên official forum, clone thêm 1 cái bên đây vì bên kia thảo luân đợi duyệt lâu vãi hà :2cool_hell_boy:
    Trong bài trước viết về cách sử dụng macro căn bản bằng 2 lệnh /cast, /xcast. Bài này mình sẽ nói sơ về cách sử dụng /script macro, code sample trong hướng dẫn là một đoạn code single dps rotation rất căn bản cho class Tàng Kiếm.

    Điểm hay và dở của script:
    + Hay: Có thể viết được các điều kiện logic phức tạp theo ý người chơi
    + Dở:
    - Số lượng ký tự cho 1 script bị hạn chế chỉ có 1024 ký tự
    - Người sử dụng phải biết lập trình Lua căn bản
    - Người sử dụng phải biết đọc hiểu API của JX3 (API public có thể download tại đây, online version mới nhất ở đây
    - Không có document hướng dẫn

    Để khai báo 1 script macro, dùng lệnh /script ngay đầu macro để khai báo đây là 1 script
    Bước đầu tiên để 1 script code chạy được, cần phải khai báo và lấy client object bằng hàm GetClientPlayer()
    Client object sẽ chứa rất nhiều variable của user hiện tại, ví dụ như lượng máu đang có, lượng máu maximum của player, lượng mân đang có, mana maximum, kiếm khí ...

    Một số variable mình sẽ sử dụng trong hướng dẫn này
    + nCurrentRage: số lượng kiếm khí đang có
    + nMaxRage: số lượng kiếm khí maximum
    + dwSchoolID: bảng nội công hiện tại

    Các hàm sẽ sử dụng
    + GetSkillCDProgress(skillID, skillLevel): Lấy thông số cooldown của skill, giá trị trả về gồm có bOnCD (skill có cooldown time hày không, giá trị là true hoặc false), currentCDTime(thời gian cooldown còn lại của skill, giá trị trả về là second bằng hex), totalCDTime (tổng thời gian cooldown của skill)
    + OnAddOnUseSkill(skillID): cast 1 skill theo skillID

    Kịch bản rotation căn bản cho Tàng Kiếm
    + Build kiếm khí lên full bằng các skill của nội công Vấn Thủy theo list skill mình sắp xếp
    + Chuyển nội công sang Sơn Cư khi kiếm khí đầy
    + Sử dụng các skill Sơn Cư theo list mình sắp xếp để dùng hết kiếm khí
    + Lặp lại các bước trên

    Bắt đầu code
    Lấy giá trị phần trăm lượng kiếm khí đang có
    Lấy thông số bảng nội công hiện tại đang sử dụng (SchoolID = 6: Vấn Thủy, SchoolID = 7: Sơn Cư)
    Tạo list skillID sẽ đánh theo thứ tự sắp xếp
    * Để lấy skillID, có thể dùng Addon HM bằng cách giữ Control và move chuột đến skill mình muốn xem ID
    Tạo hàm check skill cooldown theo skillID, nếu skill hết thời gian cooldown sẽ trả về 0
    Tạo hàm cast skill theo thứ tự list skill mình khai báo ở trên, hàm này sẽ lấy vào skill list và kiểm tra nếu skill không có cooldown thì sẽ cast và return về đầu code, nếu skill đang cooldown thì sẽ xử lý tiếp skill tiếp theo trong list. Do hàm chỉ check skill đang có cooldown hay không mà không có check xem skill đã cast hay chưa nên nếu xếp các skill không có cooldown vào trước list sẽ bị tình trạng chỉ cast được skill đó mà không xử lý skill tiếp theo.
    Xử lý rotation logic.
    Đầu tiên sẽ check xem lượng phần trăm kiếm khí đang có, nếu kiếm khí ít hơn 20% và đang ở bảng nội công Sơn Cư thì sẽ chuyển sang nội công Vấn Thủy bằng cách sử dụng skill Khiếu Nhật (skillID: 1656)
    Tiếp theo nếu phần trăm kiếm khí đang có ít hơn 100% và đang dùng nội công Vấn Thủy thì sẽ sử dụng list skill của Vấn Thủy để build kiếm khí lên 100%
    Khi phần trăm kiếm khí đã max và đang dùng nội công Vấn Thủy, chuyển sang nội công Sơn Cư
    Sử dụng skill list của nội công Sơn Cư cho đến khi nào phần trăm kiếm khí ít hơn 20%
    Code hoàn chỉnh (các bạn nào đang chơi Tàng Kiếm có thể tạo 1 cái chỉ lệnh và paste đoạn code này vào đánh thử, chỉ cần spam 1 button & relax :12:):
    * Ở trên là toàn bộ các phần căn bản để code 1 cái script xử lý logic bằng ngôn ngữ Lua dùng script engine của JX3. Do phần scripting này liên quan khá nhiều đến lập trình Lua và đọc hiểu public API của game nên mình không thể detail vào từng dòng code như làm sao để sử dụng if/else, làm sao để khai báo hàm hoặc làm sao để biết các variable của player, npc ... Các phần này các bạn nào quan tâm và có khả năng nghiên cứu code thì có thể tìm đọc Lua reference manual và public API của Kingsoft trong link mình đã post ở đầu bài.
    Mục đích bài viết là giới thiệu 1 phần chức năng hay có sẵn của game engine chưa được giới thiệu và sử dụng để cho một số bạn quan tâm có thể tìm hiểu thêm.

    Ngoài ra tất cả các dạng macro của game không support cho PVP (không cast được skill lên player) mà chỉ sử dụng được cho PVE nên các bạn đừng thắc mắc vì sao không dùng được skill lên player khác. Cái này cũng hơi upset một chút tuy nhiên theo mình nghĩ Kingsoft cũng có lý do khi block macro cho PVP khi mà đối với 1 game cần personal skill cao để thể hiện trình độ trong PVP mà chỉ cần vài chục dòng code là có thể đánh đấm ì xèo theo logic định sẵn mà không dính sai lầm nào thì hơi quá bá đạo và mất đi cái hay của nó.
     
    Chỉnh sửa cuối: 27/8/13
  2. manh0916930064

    manh0916930064 Youtube Master Race

    Tham gia ngày:
    11/7/13
    Bài viết:
    4
    Bài này em đọc bên đó rồi, ko ngờ lại gặp bác ở đây, ko biết bác đã ra bài nâng cao chưa nữa :)
     
  3. superkhung

    superkhung MadDog

    Tham gia ngày:
    10/5/05
    Bài viết:
    231
    Để xem sắp tới rảnh rổi sẽ extend bài này thành cách code addon thay vì dùng scripting bị hạn chế 1024 chả :D
     
  4. viitamiin

    viitamiin Donkey Kong

    Tham gia ngày:
    7/8/13
    Bài viết:
    387
    Bác rảnh làm luôn 1 cái macro cho MG đi :5cool_big_smile:
     
  5. superkhung

    superkhung MadDog

    Tham gia ngày:
    10/5/05
    Bài viết:
    231
    MG thì chỉ làm được spam basic thôi bởi vì 1 số variable của MG client version VN chưa có export, vd nCurrentSunEnergy, nMaxSunEnergy, nSunPowerValue, nCurrentMoonEnergy, nMaxMoonEnergy, nMoonPowerValue. Mấy cái var này cần để check Mãn Nhật, Mãn Nguyệt để làm các điều kiện ra combo.

    Đây là 1 cái code spam skill đơn giản cho aoe & single của MG

    Muốn đổi lại rotation của sun thì gọi lại hàm mg("sun") hoặc code riêng 2 cái cho 2 nút single & aoe
     
  6. proyeuem_12345

    proyeuem_12345 Youtube Master Race

    Tham gia ngày:
    24/5/08
    Bài viết:
    44
    đã test với mộc nhân :) goods phết bác.
    nhưng mà dps vẫn thấp quá . đc có 5-6k :3
     
  7. superkhung

    superkhung MadDog

    Tham gia ngày:
    10/5/05
    Bài viết:
    231
    Tui cũng chưa có con TK 80 nào nên chưa biết làm sao optimize dps cho nó, cái code này là base theo nhu cầu con TK 45 đang train thôi.
     
  8. proyeuem_12345

    proyeuem_12345 Youtube Master Race

    Tham gia ngày:
    24/5/08
    Bài viết:
    44
    hôm nọ thứ cái đống này mà k đc :'(
     
  9. superkhung

    superkhung MadDog

    Tham gia ngày:
    10/5/05
    Bài viết:
    231
    Không xài được, cái đống macro multiline này là nó dùng 1 cái addon để extend macro function của jx3, thêm vào nhiều condition và support multiline macro. Mấy cái addon này chỉ dùng được trên jx3 cn, không dùng được cho jx3 vn vì hầu hết các addon bọn nó compile thành byte code để giấu source mà lua lib version đang run tại vn không match với version đang run ở cn nên sẽ bị fail compiled header lúc game engine load addon vào.
    Có lẽ 1 thời gian nữa jx3 vn update các version sau thì sẽ xài được, hiện giờ thì không. Hiện giờ chỉ có các loại addon không compile (plain text code) mới xài được ở vn như HM, RaidGrid ...
     
  10. nirvana062

    nirvana062 Youtube Master Race

    Tham gia ngày:
    5/12/04
    Bài viết:
    32
    Chủ topic cho hỏi cái "nCurrentRage" mình search sao ko có trong cái file Excel mà chủ topic đưa ra vậy. Tại đang tìm cái tương đương cho Đường Môn để viết cái script DM cho các bạn PVE cho nhàn mà ko biết nó là gì.

    - - - Updated - - -

    Và có cách nào để check được LUA version đang run bản VN là gì ko
     
  11. herosf2006

    herosf2006 Mega Man

    Tham gia ngày:
    19/3/08
    Bài viết:
    3,449
    Nơi ở:
    Đà Nẵng
    0.7
    :3cool_shame:
     
  12. superkhung

    superkhung MadDog

    Tham gia ngày:
    10/5/05
    Bài viết:
    231
    Sorry file link API có vẻ hơi outdate, bạn có thể vào đây để xem version mới hơn (online version)
    Các variables cho player, npc này nọ nằm ở cái tab thứ 3. Để mình update lại bài thêm link API.

    Dùng hexeditor load file lua5.dll vào rồi search $Lua: sẽ thấy lua version. Của vn là Lua 5.1.4
     
  13. nirvana062

    nirvana062 Youtube Master Race

    Tham gia ngày:
    5/12/04
    Bài viết:
    32
    Bác cho hỏi con DM thì nó là Stamina hay gì vậy, bác cho em biết cái tên biến luôn được không?
     
  14. superkhung

    superkhung MadDog

    Tham gia ngày:
    10/5/05
    Bài viết:
    231
    Không có char đường môn để check nên không rõ nó là cái gì, có lẽ là 3 cái này
    nCurrentEnergy
    nMaxEnergy
    nEnergyReplenish

    Thử vô game làm cái script này để check, nếu đúng là của DM thì nó sẽ in ra giá trị tương ứng số mình đang có, nếu không thì chắc của class khác.

    /script p=GetClientPlayer()
    Output(p.nCurrentEnergy)
    Output(p.nMaxEnergy)
    Output(p.nEnergyReplenish)
     
  15. lê trần nguyễn

    lê trần nguyễn Youtube Master Race

    Tham gia ngày:
    29/8/13
    Bài viết:
    17
    cái này hợp với anh em mới chơi đấy,thank chủ thớt
     
  16. dr.johnblack

    dr.johnblack Youtube Master Race

    Tham gia ngày:
    4/9/13
    Bài viết:
    1
    Bác superkhung cho hỏi có hàm nào để mô phỏng sự kiện button click không, tức là thay vì mình click vào button đó, mình gọi hàm là xong ấy?
     
  17. Vinamil

    Vinamil Mr & Ms Pac-Man

    Tham gia ngày:
    10/9/13
    Bài viết:
    118
    công nhận pac này pro thật, thanks chia sẽ

    - - - Updated - - -

    sao e mò hoài làm cho đường môn mà ko dc nhỉ? có pac nào làm cho ĐM dc chưa, cho e xin tí kinh nghiệm:1cool_byebye:
     
  18. gamervn2002

    gamervn2002 Youtube Master Race

    Tham gia ngày:
    14/12/04
    Bài viết:
    74
    Nơi ở:
    Hồ Chí Minh
    Có bạn nào còn mày mò cái này không? Muốn viết script cho con Thiếu Lâm mà tìm mãi không biết điểm Thiền định là hàm gì? Bạn chủ topic hay bạn nào biết chia sẻ giúp. Thanks!
     
  19. little fox

    little fox C O N T R A

    Tham gia ngày:
    2/3/03
    Bài viết:
    1,944
    Nơi ở:
    INFINITY
    Bác Superkhung tư vấn chỗ này cái. Đang edit lại cái add on tự động ghép đá ngũ hành. Nó có code lọc tên vật phẩm, chứ ko lọc ID.
    Tên TQ: 五行石·火(六级)
    Tên VN: Đá Ngũ Hành-Hỏa (Lv6)

    Đang bí vì cái dấu ()của nó là ký tự TQ, toàn bộ tên ko có khoảng trắng, còn bản VN đổi lại thành (). Dùng NotePad+ edit thì nó lại nhận dấu () lại là câu lệnh, chứ ko chịu ghép vào tên vật phẩm. Bác có cách nào thỉ chỉ dùm với
    Nguyên văn đoạn code đang bị bí
     
  20. gamervn2002

    gamervn2002 Youtube Master Race

    Tham gia ngày:
    14/12/04
    Bài viết:
    74
    Nơi ở:
    Hồ Chí Minh
    Mình tìm được rồi, không ngờ giá trị cao nhất của điểm thiền định lại là 10. Làm tìm mãi.
     

Chia sẻ trang này