Topic hỏi đáp cho anh em (Về cách làm map)

Thảo luận trong 'World Editor' bắt đầu bởi Dark Gamer, 2/1/08.

Trạng thái chủ đề:
Không mở trả lời sau này.
  1. Tom_Kazansky

    Tom_Kazansky

    Tham gia ngày:
    28/12/06
    Bài viết:
    3,454
    Nơi ở:
    Hà Nội
    Spell này khá đơn giản. Cần 3 biến array: UFCaster(unit), UFTarget(unit), UFDamage(real) (trong 3 biến này thì Caster ko cần lắm, nhg cứ cho vào) và biến integer UFIndex.
    UFCaster: caster của Unholy Frenzy
    UFTarget: target của Unholy Frenzy
    UFDamage: damage của Unholy Frenzy
    UFIndex: được dùng làm "biến đếm", đếm số unit đang "bị buff" và "bị mất máu". Ta gọi mỗi (caster, target, damage) ở mỗi index là 1 "instance" //từ này ko cần hiểu sâu, tôi ko dịch đc nên để nguyên thôi
    --- Trigger thứ 1 ---
    Mã:
    Unholy Frenzy
        Events
            Unit - A unit Starts the effect of an ability
        Conditions
            (Ability being cast) Equal to Unholy Frenzy 
        Actions
            Set TempUnit = (Target unit of ability being cast)
            -------- kiem tra xem unit nay da~ co buff tu` trc hay chua --------
            For each (Integer A) from 1 to UFIndex, do (Actions)
                Loop - Actions
                    If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        If - Conditions
                            TempUnit Equal to UFTarget[(Integer A)]
                        Then - Actions
                            Skip remaining actions
                        Else - Actions
            -------- them 1 unit thi index tang 1 --------
            Set UFIndex = (UFIndex + 1)
            Set UFCaster[UFIndex] = (Triggering unit)
            Set TempInt = (Level of Unholy Frenzy  for UFCaster[UFIndex])
            Set UFTarget[UFIndex] = TempUnit
            -------- unit dc buff se mat 1 x level % max life moi giay --------
            Set UFDamage[UFIndex] = (0.01 x (Real(TempInt)))
    
    Vì có khả năng một unit đang có buff, sẽ đc buff tiếp nên ta phải kiểm tra xem unit đó đã "ở trong các unit đang bị mất máu chưa", lặp từ 1 -> UFIndex, nếu target unit mà trùng với 1 trong các UFTarget thì dừng trigger (à mà nếu bạn muốn set lại UFDamage thì set UFDamage[(Integer A)]). Lần cast đầu tiên, do UFIndex = 0 nên ko có lặp
    Nếu điều vừa nói trên chưa xảy ra, thì UFIndex phải tăng thêm 1, và index của UFCaster, UFTarget, UFDamage bây giờ là UFIndex.
    Ví dụ:
    UFIndex: 1 2 3 4 5
    Bây giờ tăng lên
    UFIndex: 1 2 3 4 5 6
    Tại trigger đó, caster, target, damage của UF là "instance" thứ 6
    --- Trigger thứ 2 ---
    Mã:
    UF Damage
        Events
            Time - Every 1.00 seconds of game time
        Conditions
        Actions
            For each (Integer A) from 1 to UFIndex, do (Actions)
                Loop - Actions
                    Set TempInt = (Integer A)
                    If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        If - Conditions
                            (UFTarget[TempInt] has buff Unholy Frenzy ) Equal to False
                        Then - Actions
                            -------- 1 unit het buff, vay index giam 1 sau do tien hanh "da^y?" index --------
                            Set UFIndex = (UFIndex - 1)
                            For each (Integer B) from TempInt to UFIndex, do (Actions)
                                Loop - Actions
                                    Set TempInt2 = (Integer B)
                                    Set UFCaster[TempInt2] = UFCaster[(TempInt2 + 1)]
                                    Set UFTarget[TempInt2] = UFTarget[(TempInt2 + 1)]
                                    Set UFDamage[TempInt2] = UFDamage[(TempInt2 + 1)]
                        Else - Actions
                    -------- ---------------- --------
                    If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        If - Conditions
                            (Percentage life of UFTarget[TempInt]) Greater than 5.00
                        Then - Actions
                            Set TempUnit = UFTarget[TempInt]
                            Unit - Set life of TempUnit to ((Life of TempUnit) - ((Max life of TempUnit) x UFDamage[TempInt]))
                        Else - Actions
    
    Phái lặp từ 1 đến UFIndex, theo ví dụ trên, lặp 1 -> 6 và deal damage cho UFTarget(1 -> 6)
    Nhg trước khi deal damage, phải kiểm tra xem UFTarget ở "instance" hiện tại (tại index = Integer A) có buff hay ko, ko thì "đẩy" index.
    Tức là: Như ví dụ trên: UFIndex: 1 2 3 4 5 6
    Giả sử instance 3 bị mất buff (dispel, out of duration,... whatever) thì instance 4 sẽ thành instance 3, 5 sẽ thành 4 và 6 sẽ thành 5 và UFIndex đương nhiên sẽ giảm 1 còn 5.
    Dưới đó thì check buff và deal damage bình thường.
    Chú ý: tôi dùng biến unit TempUnit để "tạm thời" nhận giá trị của UFTarget[TempInt], điều này ko có ý nghĩa gì đặc biệt, chỉ là viết cho "nhanh" thôi. Tức là các lệnh về sau, dùng TempUnit chắc chắn sẽ nhanh hơn dùng UFTarget[TempInt], đúng ko ?
    Và dùng TempInt thay cho (Integer A) hay TempInt2 thay cho (Integer B), biến là thứ có thể thay đổi, nếu bạn ko muốn dùng loop với Integer A hay B mà muốn dùng với biến integer nào khác chẳng hạn, thì chỉ việc set TempInt = <biến integer loop> là xong, ko phải đổi ở các lệnh trong loop nữa.
    => các bạn chăm dùng biến một tí.
    @Espeon - cool, cái Leap của bạn tôi thấy ở đầu trigger, đã "lưu" caster vào biến rồi, thế mà ở cuối vẫn dùng Trigger Unit với Casting Unit -> ???
     
  2. Exp1111

    Exp1111 Donkey Kong

    Tham gia ngày:
    19/9/08
    Bài viết:
    486
    Nơi ở:
    HN123
    Có cái condition nào check damage type và attack type ko nhi?(JASS cũng đc)
     
  3. Espeon - cool

    Espeon - cool Donkey Kong

    Tham gia ngày:
    16/1/07
    Bài viết:
    314
    Giải thích cho mình đoạn này được không?

    Tiện thể, mình vừa làm lại trigger giống của Tom, và gặp lại hiện tượng không giảm máu :x, nếu là do bug thì tại sao mình thay buff 3, 4 lần rồi vẫn thế? Tom kiểm tra lại các giá trị xem có đúng chưa? Nó có hoạt động trong map của ông không?
     
  4. Tom_Kazansky

    Tom_Kazansky

    Tham gia ngày:
    28/12/06
    Bài viết:
    3,454
    Nơi ở:
    Hà Nội
    Không có
    --------------------
    @Espeon - cool
    Cái đó là "đẩy" index thôi.
    Ví dụ có các instance: 1 2 3 4 5 6 (UFIndex = 6)
    Và instance thứ 2 dừng, vì mất buff.
    Ta lặp từ 2 đến 5 (UFIndex đã được giảm đi 1)
    Khi lặp:
    Mã:
                                   (   mới   )                   (   cũ    )
       TempInt2 = Integer B = 2 => instance 2 sẽ lấy giá trị của instance 3
       TempInt2 = Integer B = 3 => instance 3 sẽ lấy giá trị của instance 4
       TempInt2 = Integer B = 4 => instance 4 sẽ lấy giá trị của instance 5
       TempInt2 = Integer B = 5 => instance 5 sẽ lấy giá trị của instance 6
       TempInt2 = Integer B = 6 (>5) => dừng lặp
    
    Sau vòng lặp, "list" các instance mới là: 1 3 4 5 6 (UFIndex = 5)
    ----
    Cái của tôi hoạt động bình thường, xem map đó, cooldown quay 1s.
     
  5. Espeon - cool

    Espeon - cool Donkey Kong

    Tham gia ngày:
    16/1/07
    Bài viết:
    314
    Gửi map demo cho tôi xem nào (30 chars)
     
  6. Tom_Kazansky

    Tom_Kazansky

    Tham gia ngày:
    28/12/06
    Bài viết:
    3,454
    Nơi ở:
    Hà Nội
    Sặc, tôi quên gửi map ở post trước, hic, sorry
     
  7. Ice Dragon

    Ice Dragon Mega Man

    Tham gia ngày:
    6/9/04
    Bài viết:
    3,101
    Nơi ở:
    none
    Cả đám mất máu cùng lúc :">
    Dùng Unit Group thì đơn giản dễ nhìn hơn chứ nhỉ
     
  8. Tom_Kazansky

    Tom_Kazansky

    Tham gia ngày:
    28/12/06
    Bài viết:
    3,454
    Nơi ở:
    Hà Nội
    Dễ hơn, nhg còn vụ UFDamage thì sao ? cast cùng level thì ko nói, nhg khác level thì... ?
     
  9. Ice Dragon

    Ice Dragon Mega Man

    Tham gia ngày:
    6/9/04
    Bài viết:
    3,101
    Nơi ở:
    none
    :">, đúng là khéo phải dùng 4 cái Unit Group để định LV đã đc buff
     
  10. Espeon - cool

    Espeon - cool Donkey Kong

    Tham gia ngày:
    16/1/07
    Bài viết:
    314
    Tình hình là tôi copy cả vào rồi mà nó vẫn không mất máu ::(

    Ah, được rồi, một cái lỗi ngu xuẩn của level ^^
     
  11. Dark_DragonKing

    Dark_DragonKing Mr & Ms Pac-Man

    Tham gia ngày:
    23/7/08
    Bài viết:
    217
    Ông Tom làm giùm con hero Meepo the Geomancer trong DotA được không ???
    Chiêu Earthbine MUI được thì tốt
    Con ulti của nó khác DotA 1 chút.Dùng tốt trong Footmen được ý

    Mà trong DotA nó có dòng tẽt khi con Mepoo giả kill được hero,còn tui ko cần cái đó,vì nó làm lộ hết chiến thuật của footmen.Footmen la map kô cần Multiboard với mấy cái killing sýtem mà.
    ==================THANKS================
     
  12. Tom_Kazansky

    Tom_Kazansky

    Tham gia ngày:
    28/12/06
    Bài viết:
    3,454
    Nơi ở:
    Hà Nội
    @ Espeon - cool, Reincarnate rồi deal damage AOE thì rất nhiều lỗi, nên tôi chịu

    @Dark_DragonKing, rất tiếc là ko đc, cái ulti và skill Poof còn liên quan đến nhiều thứ, chịu thôi. Geostrike thì là Slow Poison có stack Damage, Movement.
    Còn Earth Bind thì trong map tôi gửi kèm ấy.
     

    Các file đính kèm:

  13. Dark_DragonKing

    Dark_DragonKing Mr & Ms Pac-Man

    Tham gia ngày:
    23/7/08
    Bài viết:
    217
    Chiêu ulti của con đó tui chỉ cần tạo ra 1 con giống y hệt spell level lúc nào cũng bằng con thật ,với cả không ảnh hưởng đến LV gain của team
    Chiêu Poof đã có chiêu thay thế roài
     
  14. Espeon - cool

    Espeon - cool Donkey Kong

    Tham gia ngày:
    16/1/07
    Bài viết:
    314
    cái model hero glow origin, tôi gắn nó vào hero bằng cách dùng skill giả cũng được, nhưng với một số con có skill hóa kiểu Bear Form hay metamorphosis thì nó bị đè thêm một lớp glow lên, thế nên vài lần là giật tung máy, muốn gắn hẳn cái glow đấy vào hero thành một model riêng biệt thì làm thế nào? (túm lại là combine model đấy)
     
  15. Tom_Kazansky

    Tom_Kazansky

    Tham gia ngày:
    28/12/06
    Bài viết:
    3,454
    Nơi ở:
    Hà Nội
    Đúng là nó bị "đè" lên, nếu cast liên tục, nhiều lần. Thật ra đây là lỗi do người tạo model, cái "model" này, khi hóa, lẽ ra nó phải chết (biến mất), nhg do người tạo đặt thời gian chết đến 10s nên glow cũ chưa mất glow mới đã hiện ra -> đè nhau. Nếu bạn để ý kĩ, glow nó sẽ dần dần biến mất.
    Việc gắn vào hero -> model "mới" -> lại import -> nặng map. Vì vấn đề này nên mới có người tạo model glow thế này (tốn có 2.5 KB)
    Tôi đã sửa cái glow này, thời gian chết chỉ còn 0.1s -> nó sẽ ko "đè" nhau nữa :))
     

    Các file đính kèm:

  16. Espeon - cool

    Espeon - cool Donkey Kong

    Tham gia ngày:
    16/1/07
    Bài viết:
    314
    Tình hình là mỗi lần hóa, cái model glow nó biến về màu đỏ, dù cho mình là màu xanh =))
     
  17. Vua_Do_Hoa

    Vua_Do_Hoa Mr & Ms Pac-Man

    Tham gia ngày:
    30/3/08
    Bài viết:
    217
    Nơi ở:
    Tp Hồ Chí Minh
  18. Tom_Kazansky

    Tom_Kazansky

    Tham gia ngày:
    28/12/06
    Bài viết:
    3,454
    Nơi ở:
    Hà Nội
    Vấn đề này tôi cũng biết, ngay cả Revive cũng bị thế. Nhg nếu bạn ấn Alt + A sử dụng Ally Color Filtering
    [​IMG]
    Thì màu sẽ trở lại bình thường.
    Nên tôi tạo 2 trigger này:
    Mã:
    GlowRecolorMorph
        Events
            Unit - A unit Starts the effect of an ability
        Conditions
            (Level of Hero Glow  for (Triggering unit)) Greater than 0
            Or - Any (Conditions) are true
                Conditions
                    (Ability being cast) Equal to Crow Form 
                    (Ability being cast) Equal to Bear Form
        Actions
            Wait 0.00 seconds
            Set TempPlayer = (Owner of (Triggering unit))
            Custom script:   if GetLocalPlayer() == udg_TempPlayer then
            Custom script:   set udg_TempInt = GetAllyColorFilterState()
            If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                If - Conditions
                    Or - Any (Conditions) are true
                        Conditions
                            TempInt Equal to 0
                            TempInt Equal to 1
                Then - Actions
                    Game - Set ally color filtering to 2
                    Game - Set ally color filtering to TempInt
                Else - Actions
            If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                If - Conditions
                    TempInt Equal to 2
                Then - Actions
                    Game - Set ally color filtering to 0
                    Game - Set ally color filtering to TempInt
                Else - Actions
            Custom script:   endif
    
    Mã:
    GlowRecolorRevive
        Events
            Unit - A unit Finishes reviving
        Conditions
            (Level of Hero Glow  for (Triggering unit)) Greater than 0
        Actions
            Set TempPlayer = (Owner of (Triggering unit))
            Custom script:   if GetLocalPlayer() == udg_TempPlayer then
            Custom script:   set udg_TempInt = GetAllyColorFilterState()
            If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                If - Conditions
                    Or - Any (Conditions) are true
                        Conditions
                            TempInt Equal to 0
                            TempInt Equal to 1
                Then - Actions
                    Game - Set ally color filtering to 2
                    Game - Set ally color filtering to TempInt
                Else - Actions
            If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                If - Conditions
                    TempInt Equal to 2
                Then - Actions
                    Game - Set ally color filtering to 0
                    Game - Set ally color filtering to TempInt
                Else - Actions
            Custom script:   endif
    
    Tại trigger GlowRecolorMorph, phần condition, trong khối Or sẽ thiếu, bạn cho thêm các ability "Morph" của bạn vào đó là đc.
    Hero Glow là ability bạn dùng để "gắn" glow cho hero, chú ý cái đó.
    Hiện giờ tôi chỉ biết trường hợp MorphRevive sẽ làm cái glow "bị" thế. Nếu bạn hoặc ai đó biết thêm trường hợp nào thì hãy báo cho tôi để tôi sửa.
    Có map demo, tôi đã gửi kèm ở dưới.
    ------------
    @Vua_Do_Hoa, lại spam hử ? /:)
     

    Các file đính kèm:

  19. Espeon - cool

    Espeon - cool Donkey Kong

    Tham gia ngày:
    16/1/07
    Bài viết:
    314
    Không biết hex có bị không nữa, mà cái file gắn kèm là gì vậy?
     
  20. Exp1111

    Exp1111 Donkey Kong

    Tham gia ngày:
    19/9/08
    Bài viết:
    486
    Nơi ở:
    HN123
    À ông Tom cho tui cái Overload của con Storm trong DotA đi, đang tập làm passive skill.
     
Trạng thái chủ đề:
Không mở trả lời sau này.

Chia sẻ trang này