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. boylove67

    boylove67 Youtube Master Race

    Tham gia ngày:
    5/5/05
    Bài viết:
    82
    đánh miss là sao ? skill chưa cd kịp hay là dame bị miss
    mà combo của phái nào những skill j :5cool_big_smile: nói rõ tý mới trả lời dc
     
  2. herosf2006

    herosf2006 Mega Man

    Tham gia ngày:
    19/3/08
    Bài viết:
    3,449
    Nơi ở:
    Đà Nẵng
    mình làm 1 chuỗi skill vạn hoa -> chiêu 1 -> chiêu 2 -> chiêu 3 mỗi chiêu tạo trên người mục tiêu 1 cái debuff (nếu trượt thì không có debuff) rồi chiêu cuối kích hoạt cái 3 cái debuff ấy gây dame
    miss 1 trong 3 chiêu trên thì khi kich hoạt ko đạt đc dame to nhứt :6cool_smile:
     
  3. boylove67

    boylove67 Youtube Master Race

    Tham gia ngày:
    5/5/05
    Bài viết:
    82
    VH thì khi cast skill miss nó sẽ cast lại.
    VD: Cast Lan Thôi Ngọc Chiết miss ko có hiệu ứng rút độc thì nó sẽ cast lại vì skill này cd = 0 còn những skill nào mà có cd thì nó chờ hết cd mới cast lại
     
  4. KatherineHaAnh

    KatherineHaAnh Legend of Zelda

    Tham gia ngày:
    13/3/03
    Bài viết:
    1,114
    Kiểm tra trên target có đủ 3 cái buff TDC, LTNC, PDTD thì mới đánh NTCP được mà :4cool_beauty:

    - - - Updated - - -

    Hàm mà ko gọi thì nó check thế nào :5cool_sweat:
     
  5. boylove67

    boylove67 Youtube Master Race

    Tham gia ngày:
    5/5/05
    Bài viết:
    82
    local function CheckCDs(skillID) hàm này đã check tất cả skill r` ko cần phải khai báo local skill ở trên nó cũng check
     
  6. KatherineHaAnh

    KatherineHaAnh Legend of Zelda

    Tham gia ngày:
    13/3/03
    Bài viết:
    1,114
    Trời ạ, đấy là khai báo một hàm, sau đó muốn dùng phải gọi nó ra và đưa tham số vào :2cool_burn_joss_sti
     
  7. boylove67

    boylove67 Youtube Master Race

    Tham gia ngày:
    5/5/05
    Bài viết:
    82
    Lạy hồn :2cool_burn_joss_sti mình đang nói là bạn đã khai báo hàm check cd skill thì sao xuống điều kiện bạn lại CheckCDs(TVVN) để làm j thôi.
    Bạn ko thích có người góp ý thì thôi :5cool_big_smile: mún tìm vài người đam mê marco tham khảo tý mà khó vật
     
  8. herosf2006

    herosf2006 Mega Man

    Tham gia ngày:
    19/3/08
    Bài viết:
    3,449
    Nơi ở:
    Đà Nẵng
    bạn ơi cho hỏi code prepare nghĩa là gì
     
  9. boylove67

    boylove67 Youtube Master Race

    Tham gia ngày:
    5/5/05
    Bài viết:
    82
    GetSkillPrepareState() dùng để check skill vận công có đang dc sử dụng hay ko
     
  10. KatherineHaAnh

    KatherineHaAnh Legend of Zelda

    Tham gia ngày:
    13/3/03
    Bài viết:
    1,114
    Mình cũng ko hiểu lắm bởi với kiến thức lập trình của mình thì hàm Checkbuff và hàm CheckCDs đều là hàm người dùng định nghĩa thông qua việc khai báo. Bản thân hàm khi đc khai báo sẽ ko tự chạy mà phải có đoạn code gọi nó ra. Bạn có thể test bằng cách viết thêm một điều kiện sau cái điều kiện gọi TVVN mà ko có CheckCDs(TVVN) xem trong lúc đang cooldown nó có thực hiện lệnh tiếp theo ko? Mình nghĩ là ko:5cool_big_smile:
    Ở đây đang là tranh luận vì mình thấy cách giải thích của bạn chưa thuyết phục. Mình cũng rất hoan nghênh những người cùng tham gia nghiên cứu macro chứ ko bảo thủ gì đâu :4cool_beauty:
     
  11. boylove67

    boylove67 Youtube Master Race

    Tham gia ngày:
    5/5/05
    Bài viết:
    82
    Mã:
    /script local p=GetClientPlayer()
    local T=GetTargetHandle(p.GetTarget())
    local MP=p.nCurrentMana*100/p.nMaxMana
    local K=p.nAccumulateValue
    local THSkills={355,309,364,300}
    local  A,B,C=p.GetSkillCDProgress (310,p.GetSkillLevel(310))
    local function CheckBuff(p,buffID)
    buffed=false
    for z,x in pairs(p.GetBuffList()) do
    if x.dwID==buffID then
    buffed=true
    end
    end
    return buffed
    end
    local function CheckCDs(skillId)
    bOnCD,currentCDTime,totalCDTime = p.GetSkillCDProgress(skillId,p.GetSkillLevel(skillId)) return currentCDTime/16 == 0 end
    local function Use(skillIDs)
    for z,x in pairs(skillIDs) do
    if(CheckCDs(x)) then OnAddOnUseSkill(x) return true end end end
    if MP<80 and K>=8 then OnAddOnUseSkill(316) end
    if not(CheckBuff(p,1376)) then OnAddOnUseSkill(312) end
    if not(CheckBuff(p,378)) then OnAddOnUseSkill(362) end
    if K==10 then OnAddOnUseSkill(365) end
    if K<=2 then OnAddOnUseSkill(313) end
    OnAddOnUseSkill(2699)
    Use(THSkills)
    if C==0 and T.GetSkillPrepareState() then use(310) end
    Đây là đoạn marco của TD Thái Hư mình test theo kiểu dùng lệnh local các skill chạy bt ko gặp vấn đề j cả
     
  12. boylove67

    boylove67 Youtube Master Race

    Tham gia ngày:
    5/5/05
    Bài viết:
    82
    Mã:
    /script N=GetClientPlayer()
    /script T=GetTargetHandle(N.GetTarget())
    /script P=N.nAccumulateValue
    /script mn=N.nCurrentMana*100/N.nMaxMana
    /script function use(id) A,B,C=N.GetSkillCDProgress(id,N.GetSkillLevel(id)) if C==0 then OnAddOnUseSkill(id,N.GetSkillLevel(id)) end end
    /script function buff(mb,id,lvl) for z,x in pairs(mb.GetBuffList() or {}) do if x.dwID==id and (lvl==nil or x.dwLevel==lvl) then return true end end return false end
    /script D,E,F=N.GetSkillCDProgress(310,N.GetSkillLevel(310));
    /script if T.GetSkillPrepareState() and N.GetSkillPrepareState() then N.StopCurrentAction() end
    /script if F==0 and T.GetSkillPrepareState() then use(310) end
    /script if mn<80 and P>=9 then use(316) end
    /script if not buff(N,378) then use(362) end
    /script if not buff(N,561) then use(361) end
    /script use(355)
    /script use(300)
    /script if P==10 then use(365) end
    /script use(2699)
    /script if P<3 then use(313) end
    /script use(58)
    /script use(309)
    /script use(364)
    Đây là đoạn code mình đang dùng tham khảo từ TQ viết ra
     
  13. KatherineHaAnh

    KatherineHaAnh Legend of Zelda

    Tham gia ngày:
    13/3/03
    Bài viết:
    1,114
    Bạn có thể giải thích cho mình việc dùng lệnh CheckCDs(x) để làm gì ko? Rõ ràng trước khi cast một chiêu thì bạn cần check xem nó có đang bị cooldown ko, ở đây bạn khai báo một list 4 skill trong cái array THskills rồi dùng vòng for để check cooldown trước khi đánh. Đối với TVVN bạn ko làm thế mà chỉ check buff thì mình cũng thấy lạ, nó chạy vì đơn giản là nó gọi skill đang cooldown ko được nó gọi tiếp skill sau thôi còn về mặt logic mà nói thì là ko hợp lý :5cool_big_smile:
    Có thể để tiết kiệm ký tự thì cách lập trình của bạn là hợp lý nhưng đấy ko phải là thói quen của người lập trình :4cool_beauty:
     
    Chỉnh sửa cuối: 14/11/13
  14. KatherineHaAnh

    KatherineHaAnh Legend of Zelda

    Tham gia ngày:
    13/3/03
    Bài viết:
    1,114
    Đọc lại code của thằng Tàu thì thấy nó làm chuẩn luôn vì nó viết một hàm use(id) với id là skillID được đưa vào và trong hàm use(id) này nó check cooldown của skill trước khi sử dụng lệnh UseAddOnSkill(id) để gọi skill đấy. Bạn tham khảo nhưng hình như tham khảo chưa đến nơi đến chốn :2cool_burn_joss_sti
     
  15. boylove67

    boylove67 Youtube Master Race

    Tham gia ngày:
    5/5/05
    Bài viết:
    82
    Bạn có thể thử test xem khi hết cd thì có buff TVVN hay ko là bít và trong thời gian cd thì nó có báo là Đang trong thời gian điều chỉnh hay ko là bít
     
  16. boylove67

    boylove67 Youtube Master Race

    Tham gia ngày:
    5/5/05
    Bài viết:
    82
    Code của Tàu nó dùng OnUseSkill() nên copy về 100% ko xài dc phải sửa lại thành OnAddOnUseSkill() thì mới xài dc.
    A,B,C hay bOnCD,currentCD,totalCD cũng chỉ là cách đặt tên thôi quan trọng là sau khi check CD thì theo addon tụi Tàu thì nó dùng lệnh OnAddOnUseSkill() để lập tức cast skill. Còn hàm của supperkhung post thì lấy cdtime hiện tại chia cho 16 nếu = 0 thì tính là skill đã cd xong sau đó trải qua thêm 1 phép tính
    "local function Use(skillIDs)
    for z,x in pairs(skillIDs) do
    if(CheckCDs(x)) then OnAddOnUseSkill(x) return true end end end"
    thì skill mới dc sử dụng.
    Mình tự tin post marco mình tham khảo từ Tàu lên thì cũng đã qua ngâm cứu r` mới dám post. Còn như bạn nói thì chắc là mình tham khảo nhưng vẫn còn gà :5cool_big_smile:
    2 loại khai báo hàm này đều có ưu nhược điểm riêng. Mình đã test dps thì loại 2 cho số dps cao hơn ~1-1k5 thế nên mình dùng loại 2 này
    Post 2 loại cho mọi người tham khảo ai cảm thấy loại nào thích hợp với mình thì check, tìm hiểu, hỏi để hoàn thiện marco cho bản thân. Chẳng thể nào mà ôm nguyên si 1 marco của người khác về làm của mình dc cả.
     
  17. KatherineHaAnh

    KatherineHaAnh Legend of Zelda

    Tham gia ngày:
    13/3/03
    Bài viết:
    1,114
    há há, bây giờ mới rảnh ngồi đọc lại code thấy đoạn
    if C==0 and T.GetSkillPrepareState() then use(310) end
    quả là bá đạo vì bạn chơi Tử Hà thì lấy đâu ra kiếm phi kinh thiên mà ngắt skill vận công của đối phương, chưa kể đấy phải là lệnh đầu tiên trong list lệnh sử dụng thì bạn lại nhồi nó xuống cuối cùng. Chơi Tử Hà thì phải thay vào đó bằng skill Bát quái động huyền chứ :4cool_beauty:. Code của thằng Tàu nó viết là nếu bạn đang vận công, đối phương cũng đang vận công thì bạn dừng ngay vận công và ra chiêu Kiếm phi kinh thiên sau đó mới là một loạt điều kiện kiểm tra mana dưới 80% và số ô khí lớn hơn hoặc bằng 4.5 thì nó cast Bão nguyên thủ khuyết. Tiếp theo nó check buff xem có Lăng Thái Hư và Toái Tinh Thần không thì nó buff, skill nó sẽ đánh lần lượt như sau:
    Bằng Hư ngự phong
    Ngưng thần tụ khí
    Nếu ô khí lên tới 5 ô thì đánh Vô Ngã Vô Kiếm
    đánh skill có ID là 2699 thì mình chịu ko biết là skill gì
    nếu ô khí nhỏ hơn 1.5 thì gọi Thao Quang Dưỡng Hối
    Mãnh hổ hạ sơn
    Thiên địa vô cực
    Tam Hoàn sáo nguyệt
    Tất cả các chiêu nó đánh ra đều qua điều kiện check cooldown rồi nhé, chiêu nào đang cooldown là nó bỏ qua luôn.

    - - - Updated - - -

    Mình có thể cược bao nhiêu cũng được với bạn là nếu bạn cast TVVN lên rồi hủy buff TVVN đi để hết TVVN trong khi skill còn cooldown và chạy code của bạn sẽ thấy có thông báo là Đang điều tức :4cool_beauty:
     
  18. KatherineHaAnh

    KatherineHaAnh Legend of Zelda

    Tham gia ngày:
    13/3/03
    Bài viết:
    1,114
    Cho mình hỏi một câu hơi tế nhị là bạn có học chuyên ngành về lập trình không? Nếu bạn học về lập trình thì mình stop tranh luận với bạn ở đây vì công sức đào tạo của thầy cô bạn đi xuống sông xuống bể hết còn nếu bạn tự mày mò để viết thì mình sẽ nói tiếp với bạn là kiểu viết của Superkhung là viết ra một hàm CheckCDs(skillID) để check cooldown của một skill bất kỳ. Bạn ấy có một list skill cần đánh lần lượt theo thứ tự ưu tiên nên khai một mảng constant rồi dùng vòng for duyệt qua mang đó, trước khi đánh đều check qua cooldown. Thằng tàu nó viết code ko như thế mà nó làm một hàm use(id) để gọi một skill nó cần đánh, trong hàm đấy nó có điều kiện check cooldown rồi đánh. Viết kiểu gì thì kiểu khi muốn gọi một skill có cooldown bao giờ người ta cũng phải check qua cooldown của nó :2cool_burn_joss_sti
     
  19. boylove67

    boylove67 Youtube Master Race

    Tham gia ngày:
    5/5/05
    Bài viết:
    82
    Mình ghi rõ ràng là marco cho TD Thái Hư thì lấy đâu ra bát quái động huyền (370) :2cool_burn_joss_sti
    Marco mình tham khảo từ Tàu nên giống tụi nó ~50% từ khai báo các hàm còn thứ tự ra skill dc sắp xếp trong marco là do mình chơi Thái Hư và muốn xuất skill theo thứ tự đó. Mình có ghi rõ là tham khảo từ Tàu đấy thôi nên chả ngại j chuyện bản quyền cả :5cool_big_smile:
    Tất nhiên là nó sẽ báo là đang điều tức nhưng cái đó có quan trọng đâu o.o bởi vì marco nó sẽ chạy tiếp skill tiếp theo cho đến khi nó buff dc nên nói chung là hết buff và hết cd nó sẽ buff liền. CÒn nếu có thêm điều kiện check CD thì cũng chỉ hơn dc 1 cái là nó ko báo đang điều tức và cd xong thì nó lập tức xài. Hiệu quả như nhau thì tại sao phải thêm 1 điều kiện vào cho marco nó dài ra. "Ý mình là như thế ko phải muốn tranh luận là marco của bạn sai và mình đúng. OK"
    Mình chưa học qua lớp lập trình nào, chỉ tìm hiểu và sửa theo ý mình để có thể thuận tiện hơn và raid hiệu quả hơn. Góp ý với bạn để đơn giản hóa marco và cũng học hỏi thêm. Nếu bạn ko muốn tranh luận nữa thì thôi chả sao. Mình chỉ hiểu marco theo cách của mình và muốn làm nó gọn lại để add thêm điều kiện vậy thôi. Mình cũng chả hiểu nhiều về lý thuyết chỉ thực hành và rút ra những kinh nghiệm của riêng mình vậy thôi :5cool_big_smile:
     
  20. KatherineHaAnh

    KatherineHaAnh Legend of Zelda

    Tham gia ngày:
    13/3/03
    Bài viết:
    1,114
    Há há, bây h mình đã hiểu ý bạn :9cool_haha: thế bạn bỏ cái hàm checkCD đi chắc macro của bạn vẫn chạy bt đấy, chỗ vòng for của function use ấy, tiết kiệm đc khối ký tự. Ngoài ra bạn sử dụng function OnAddOnUseSkill khá nhiều, nên viết lại một cái function chỉ là
    Local function U(x) OnAddOnUseSkill(x) end
    Sau đó thay toàn bộ OnAddOnUseSkill bằn U là đc :4cool_beauty:
    Đoạn đánh Kiếm phi kinh thiên nên cho lên đầu tiên hoặc bỏ đi chứ lúc target vận công mà lại bình tĩnh cast tọa vọng với cắm khí trường thì nó vận công xong rồi :6cool_beat_shot::6cool_beat_shot:
     

Chia sẻ trang này