Topic hỏi đáp về cách làm map | version 15

Thảo luận trong 'World Editor' bắt đầu bởi Tom_Kazansky, 2/9/12.

  1. Ngoc LeO

    Ngoc LeO Mario & Luigi

    Tham gia ngày:
    23/7/06
    Bài viết:
    839
    Nơi ở:
    Nothing...
    Air Time (seconds) -

    Cái này là tùy bạn chỉnh thời gian bay đó mà
     
  2. bahomao12345

    bahomao12345 Mr & Ms Pac-Man

    Tham gia ngày:
    9/6/12
    Bài viết:
    111
    Ai cho em link download World Editor 1.24 cái :((
     
  3. Ngoc LeO

    Ngoc LeO Mario & Luigi

    Tham gia ngày:
    23/7/06
    Bài viết:
    839
    Nơi ở:
    Nothing...
    Link đây,search google một cái là ra ngay,bạn down về giải nén,copy tất cả các file bên trong chép đè vào thư mục Warcraft III của bạn.
     
  4. goldviper

    goldviper Mario & Luigi Lão Làng GVN

    Tham gia ngày:
    7/1/10
    Bài viết:
    721
    Nơi ở:
    Tổ dân phố
    thank bạn nhưng mình hỏi tốc độ bay lên bay xuống để làm custom spell ý
    Tiện thể hỏi luôn cái Model Editor của mình bị thế này khi xem model ,có ai biết chỉnh lại bình thường ko Glow.jpg
     
  5. bahomao12345

    bahomao12345 Mr & Ms Pac-Man

    Tham gia ngày:
    9/6/12
    Bài viết:
    111
    Giải nén ra nhưng khi vào World Editor vẫn là bản 1.23 bạn ơi :(
     
  6. Espeon - cool

    Espeon - cool Donkey Kong

    Tham gia ngày:
    16/1/07
    Bài viết:
    314
    Dòng order string "Human - Dragonhawk Rider - Cloud" của tớ không hoạt động, không hiểu sao, vì cast bình thường thì vẫn được, order thì unit không nhận lệnh
     
  7. raivor

    raivor Dragon Quest Lão Làng GVN

    Tham gia ngày:
    24/7/09
    Bài viết:
    1,411
    Nó không tìm thấy texture nên bị vậy đó, sửa lại link texture là được, trong particle node ấy.
     
  8. vuongkkk

    vuongkkk T.E.T.Я.I.S

    Tham gia ngày:
    22/5/10
    Bài viết:
    588
    Nơi ở:
    Hà Nội
    Có vài vấn đề ở đây:
    - Nếu đã dùng jass thì đừng dùng Location nữa mà dùng x và y đi! GetSpellTargetX() và GetSpellTargetY()
    - Và nếu group dùng ngay tức thời mà ko dùng để lưu thì dùng static group để đỡ phải khởi tạo local group nhiều lần và mất công destroy
    - Khi người ta lấy instance (giá trị khởi tạo) thì chả ai dùng cách loop như của cậu để tìm ra "id" phù hợp cả. Nếu đã custom cả cái id thì người ta sẽ dùng riêng 1 stack để lưu các giá trị đã dùng rồi
    và nếu trong đó ko có giá trị nào thì mới tăng thêm giá trị id max. Còn nếu ko người ta sẽ dùng function allocate và deallocate của vjass để lấy ra id
    - Chính việc ko khởi tạo rõ ràng đã làm code cậu chậm đi ở 2 chỗ khi khởi tạo phải loop để kiểm tra từ đầu và khi run thì dù cái id đó ko có chạy thì vẫn dính loop!
    - Không chỉ ảnh hưởng tới tốc độ mà cậu còn khiến code cậu chạy sai lệch khi mà ngay cả cái timer của instance này chạy lun cả code của instance khác. Như vậy khi multicast thì chưa chắc interval deal dam của nó đã là SPELL_INTERVAL của cậu mà có thể là khoảng cách giữa 2 lần cast liên tiếp nếu khoảng cách này nhỏ hơn SPELL_INTERVAL. Thường thì khi gặp trường hợp thế này hoặc là dùng system như kiểu T32 của Jesus4Lyf hoặc TimerUtils của Vexorian. Mà ko xài hàng của người khác thì bản thân vẫn tự viết code để loop với chỉ 1 timer loop liên tục tất cả các instance là được

    Tóm lại: Code chưa tối ưu, hoạt động có khi còn ko theo đúng ý coder @@

    Nếu cậu làm custom theo như cách tớ đã nói thì tốc độ phụ thuộc thời gian bay (số lần loop) và độ cao max
    Thời gian bay thì 0.9, độ cao max khoảng 400 << Cỡ này. Chính xác hơn thì ko rõ ...
    Mà độ cao thì còn tùy thuộc vào độ to của unit đấy nữa cơ nếu cậu tạo effect attach origin @@
     
    Chỉnh sửa cuối: 19/10/12
  9. frostwyrm_9x

    frostwyrm_9x Mr & Ms Pac-Man

    Tham gia ngày:
    12/7/09
    Bài viết:
    190
    Nơi ở:
    Warcraft III
    ai biết cách skill chọc đất impale khi đang air time thì ko bị invul ko
     
  10. Ngoc LeO

    Ngoc LeO Mario & Luigi

    Tham gia ngày:
    23/7/06
    Bài viết:
    839
    Nơi ở:
    Nothing...
    Cho mình hỏi có cách nào move vị trí item trong inventory mà ko dùng tới lệnh UnitDropItemSlot không ? Vì khi dùng lệnh này unit thường bị đứng khựng lại :-< rất phiền
     
  11. HiroshiKaze

    HiroshiKaze Youtube Master Race

    Tham gia ngày:
    19/8/12
    Bài viết:
    66
    Nơi ở:
    Tp.HCM
    chú vuongkkk có thể cho xin cái nick yahoo để có gì tui hỏi vài thứ được không??
    có vài cái chú nói bên trên cũng chưa hiểu cách fix làm sao nên để hỏi riêng lại thì đỡ spam 4rum hơn
    mới học nên sai sót nhiều cũng thường tình nên cần có người như chú chỉ sai và chỉ cách fix :D thanks nhiều
     
  12. vuongkkk

    vuongkkk T.E.T.Я.I.S

    Tham gia ngày:
    22/5/10
    Bài viết:
    588
    Nơi ở:
    Hà Nội
    Đấy là cậu stun unit trước rồi cho unit đấy bay = cách thay đổi độ cao unit đó như map demo impale ko invu này

    Thực ra là ko có cách nào. Nhưng nếu làm thế này thì có hiệu ứng tương tự!
    PHP:
    function ChangeSlot_Actions takes nothing returns nothing
        local item it
    =UnitItemInSlot(gg_unit_Hpal_00000)
        
    local integer id=GetItemTypeId(it)
        
    call RemoveItem(it)
        
    call UnitAddItemToSlotById(gg_unit_Hpal_0000id5)
    endfunction

    function InitTrig_ChangeSlot takes nothing returns nothing
        set gg_trg_ChangeSlot 
    CreateTrigger(  )
        
    call TriggerRegisterPlayerEventEndCinematicgg_trg_ChangeSlot Player(0) )
        
    call TriggerAddActiongg_trg_ChangeSlot , function ChangeSlot_Actions )
    endfunction
    System của người ta tớ đã cho cậu link rồi!.
    Còn nếu cậu ko hiểu cách dùng thì có map này cho cậu coi 2 trigger SlideData và CommonMove dùng 2 system mà tớ đã nêu.
    Cậu thích code tay như em đã trình bày thì có thể tham khảo map này
     
    Chỉnh sửa cuối: 19/10/12
  13. Tom_Kazansky

    Tom_Kazansky

    Tham gia ngày:
    28/12/06
    Bài viết:
    3,454
    Nơi ở:
    Hà Nội
    ví dụ item muốn di chuyển là A:

    drop A
    lặp từ slot 1 đến slot cần di chuyển
    nếu slot này trống, đưa "dummy item" cho hero, nếu không thì thôi
    đưa item A cho hero
    drop các "dummy item"

    Mã:
    function UnitAddItemToSlot takes unit u, item it, integer [COLOR="#0000FF"]slot[/COLOR] returns boolean
        local integer i = 0
        local item array it2
        local integer it2c = 0
        local boolean ok
        loop
            exitwhen i > slot - 1
            if UnitItemInSlot(u,i) == null then
                set it2c = it2c + 1
                set it2[it2c] = [COLOR="#0000FF"]SlotFiller[/COLOR][it2c-1]
                call UnitAddItem(u,it2[it2c])
            endif
            set i = i + 1
        endloop
        call SetItemVisible(it,true)
        set ok = UnitAddItem(u,it)
        set i = 1
        loop
            exitwhen i > it2c
            call UnitRemoveItem(u,it2[i])
            call SetItemPosition(it2[i], [COLOR="#0000FF"]ItemHideX[/COLOR], [COLOR="#0000FF"]ItemHideY[/COLOR] )
            set it2[i] = null
            set i = i + 1
        endloop
        return ok
    endfunction
    
    ở đây:

    slot là số slot cần di chuyển đến, từ 0 -> 5

    SlotFiller là item array chứa các "dummy item" (tạo lúc mới vào game)
    ItemHideXItemHideY là vị trí để dấu item
     
  14. Ngoc LeO

    Ngoc LeO Mario & Luigi

    Tham gia ngày:
    23/7/06
    Bài viết:
    839
    Nơi ở:
    Nothing...
    Cám ơn anh,em đã làm được rồi,cách chèn dummyitem vào các slot trống để move item tới slot mong muốn rất hay :"> rất sáng tạo,em ko tài nào nghĩ đc như vậy

    Nhưng em làm thử thì có vẻ nó ko move được item có sẵn trên người unit,vì thế em thêm dòng lệnh UnitRemoveItem() trước khi add nên đã làm được rồi \m/


    P/s: Không biết ở map mọi người ra sao,map của em có 4k7 doodads (trong đó 1 nửa là cây,một nửa là doodads) thôi mà khi dùng spell (warstomp,thunder clap.v.v.) fps giảm từ 64 xuống còn có 55 fps (em dùng fraps để đo)
    Trước đó thì map em tầm 10k doodads thì giảm xuống tới 43 fps,em đã xóa hết ko dùng các model có animation,ko đặt sát nhau,ko dùng model đổi màu mà cũng chỉ được tới 55 fps (đã test thử khi xóa hết doodads). Map em size 128x128
    Trong khi đó ở map Dota thì test các spell tương tự cũng chỉ chênh lệnh 62~64 fps
    Liệu có phải do phần mềm nén map chưa tốt hay do một nguyên nhân nào đó ?
    Ai có kinh nghiệm vụ này thì chia sẻ giúp :D
     
    Chỉnh sửa cuối: 20/10/12
  15. Tom_Kazansky

    Tom_Kazansky

    Tham gia ngày:
    28/12/06
    Bài viết:
    3,454
    Nơi ở:
    Hà Nội
    quên ko nói, function trên không có drop item A =))

    function trên chỉ add item "it" cho unit "u" vào slot "slot" :-j
     
  16. NguLongHaKhac

    NguLongHaKhac T.E.T.Я.I.S

    Tham gia ngày:
    5/2/11
    Bài viết:
    653
    Nơi ở:
    MC
    Map 128~256,cho hết tất cả cây vào,dùng spell warstomp Fps có 58 :3cool_embarrassed: (Dùng Frap để đo)
    -----------------------------------------------------------------------
    Tiện hỏi luôn là làm thế nào để :
    Xác định thời gian chính xác khi unit này từ A đến B (mình tạo 1 trigger order unit move rồi xóa nó đi nhưng không muốn phải đếm giây từ a đến b là bao nhiêu) ?
    -----------------------------------------------------------------------
    Làm thế nào để phóng to cái model aura mà không chỉnh sửa bên ngoài (ý mình là chỉnh sửa bằng WE) ?
     
  17. dh-g

    dh-g Fire in the hole!

    Tham gia ngày:
    29/8/09
    Bài viết:
    2,654
    Nơi ở:
    Q1 TP.HCM
    vì trong dota không dùng WarStomp,Thunder Clap cả :-?? mà chỉ dùng custom WarStomp và ThunderClap vì loại gốc có vụ rung terrain làm "ăn" FPS map lắm! :-s
     
  18. Stork[gm]

    Stork[gm] Donkey Kong

    Tham gia ngày:
    29/5/09
    Bài viết:
    438
    Nơi ở:
    서울한국
    Có cái Defending Blast đây, làm từ tầm 1 năm trc bây giờ lôi lại ngồi sửa. Trong khi đó, mình mất tới hơn 1 tuần để tìm điểm khác biệt giữa cái của mình và trong dota. Trong dota thì: khi invoker vẩy ra cái DB thì cái này đi đến đâu là unit bị knockback theo kiểu tỏa ra chứ ko chỉ bị đẩy lùi theo 1 hướng, trong khi spell của mình đẩy cả cục unit chỉ theo 1 hướng nên rất lag. p/s: ai hiểu k nhỉ?
    Mã:
    Defending Blast Start
        Events
            Unit - A unit Begins casting an ability
        Conditions
            (Ability being cast) Equal to Deafening Blast Main
        Actions
            Set DBCaster = (Casting unit)
            Set DBTargetPoint = (Target point of ability being cast)
            Set KnockBackDuration = 7.50
            Set DBDamage = 12500.00
            Set Position[1] = (Position of DBCaster)
            Set Position[2] = (Position[1] offset by 70.00 towards (Angle from Position[1] to DBTargetPoint) degrees)
            If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                If - Conditions
                    (Distance between Position[1] and DBTargetPoint) Less than or equal to 50.00
                Then - Actions
                    Set DBAngle = (Facing of DBCaster)
                Else - Actions
                    Set DBAngle = (Angle from Position[1] to DBTargetPoint)
            Unit - Create 1 Defending Blast for (Owner of DBCaster) at Position[2] facing DBAngle degrees
            Animation - Change (Last created unit)'s animation speed to 50.00% of its original speed
            Unit - Add a 0.80 second Generic expiration timer to (Last created unit)
            Set DBDummy = (Last created unit)
            Custom script:   call RemoveLocation( udg_Position[1] )
            Custom script:   call RemoveLocation( udg_Position[2] )
            Trigger - Turn on Defending Blast Period <gen>
            Trigger - Turn on Defending Blast Knock <gen>
    
    Defending Blast Period
        Events
            Time - Every 0.01 seconds of game time
        Conditions
        Actions
            If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                If - Conditions
                    (DBDummy is dead) Equal to True
                Then - Actions
                    Trigger - Turn off (This trigger)
                Else - Actions
            Set Position[1] = (Position of DBDummy)
            Set Position[2] = (Position[1] offset by 13.00 towards DBAngle degrees)
            Unit - Move DBDummy instantly to Position[2]
            Set EnemiesGroup = (Units within 225.00 of Position[1] matching (((((Matching unit) is A structure) Equal to False) and (((Matching unit) is in DamageDone) Equal to False)) and (((((Matching unit) is in DBDamageGroup) Equal to False) and (((Matching unit) is alive) Equal to Tru
            Unit Group - Pick every unit in EnemiesGroup and do (Actions)
                Loop - Actions
                    Unit Group - Remove (Picked unit) from EnemiesGroup
                    Unit Group - Add (Picked unit) to DBDamageGroup
                    Unit - Order (Picked unit) to Stop
                    Unit - Cause DBCaster to damage (Picked unit), dealing DBDamage damage of attack type Spells and damage type Unknown
                    Unit - Set the custom value of (Picked unit) to (Integer((KnockBackDuration / 0.03)))
            Unit Group - Remove all units from EnemiesGroup
            Custom script:   call RemoveLocation( udg_Position[1] )
            Custom script:   call RemoveLocation( udg_Position[2] )
    
    Defending Blast Knock
        Events
            Time - Every 0.01 seconds of game time
        Conditions
        Actions
            Unit Group - Pick every unit in DBDamageGroup and do (Actions)
                Loop - Actions
                    Set KnockbackPosition[1] = (Position of (Picked unit))
                    If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        If - Conditions
                            (Custom value of (Picked unit)) Less than or equal to 1
                        Then - Actions
                            Unit Group - Add (Picked unit) to DamageDone
                            Unit Group - Remove (Picked unit) from DBDamageGroup
                            Unit - Create 1 Dummy Unit for (Owner of DBCaster) at KnockbackPosition[1] facing Default building facing degrees
                            Unit - Add Defending Blast Attack Prevent to (Last created unit)
                            Unit - Order (Last created unit) to Neutral Pandaren Brewmaster - Drunken Haze (Picked unit)
                            Unit - Add a 2.00 second Generic expiration timer to (Last created unit)
                        Else - Actions
                            Unit - Set the custom value of (Picked unit) to ((Custom value of (Picked unit)) - 1)
                            Set KnockbackPosition[2] = (KnockbackPosition[1] offset by (7.00 / 5.00) towards DBAngle2 degrees)
                            Destructible - Pick every destructible within 150.00 of KnockbackPosition[2] and do (Actions)
                                Loop - Actions
                                    Destructible - Kill (Picked destructible)
                            Unit - Move (Picked unit) instantly to KnockbackPosition[2]
                    Custom script:   call RemoveLocation( udg_KnockbackPosition[1] )
                    Custom script:   call RemoveLocation( udg_KnockbackPosition[2] )
            If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                If - Conditions
                    And - All (Conditions) are true
                        Conditions
                            (DBDummy is alive) Equal to False
                            (Number of units in DBDamageGroup) Equal to 0
                Then - Actions
                    Unit Group - Remove all units from DBDamageGroup
                    Unit Group - Remove all units from DamageDone
                    Unit Group - Remove all units from EnemiesGroup
                    Trigger - Turn off (This trigger)
                Else - Actions
    
     
  19. LeoNguyen112

    LeoNguyen112 Dragon Quest

    Tham gia ngày:
    22/5/10
    Bài viết:
    1,438
    Nơi ở:
    TP.HCM
    ^ Là vì units bị knock back theo 1 hướng xác định từ trước (theo hướng của biến DBAngle2 - biến này chả thấy set ở đâu nhưng lại dùng). Còn trong dota mỗi unit bị knock back theo 1 hướng riêng, ví dụ lúc pick unit để knockback, thêm vào:
    Mã:
    set Position[1] = position of picked unit
    set Position[2] = position of DB_Dummy
    set DBAngle3[custom value of picked unit] = Angle between Position[1] and Position[2]
    Remove leak...
    
    Và khi move knocked-back units thì move theo biến DBAngle3
     
  20. SHAZAM!

    SHAZAM! Red, Pokémon champion Lão Làng GVN

    Tham gia ngày:
    21/7/12
    Bài viết:
    7,374
    Nơi ở:
    Rock of Eternity
    Thế cái War Stomp của Centaur cũng xài custom "rung terrain" à?
     

Chia sẻ trang này