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

Thảo luận trong 'World Editor' bắt đầu bởi Tom_Kazansky, 20/10/11.

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

    hieu2525 Mr & Ms Pac-Man

    Tham gia ngày:
    23/3/09
    Bài viết:
    111
    Nơi ở:
    HN
    Cho em hỏi, em có 1 spell khi cast nó sẽ đẩy mọi unit ra xung quanh mình nhưng nó lại đẩy xuyên núi doodad nên em ko biết làm cách nào, xin mọi người giúp dùm em :-s
    Mã:
    scope RejuvenationCyclone initializer OnInit
        
        globals
            private constant integer SPELL_ID = 'A07I'
    //this is the spell ID (under the view tab, check view raw data and find your spell to get this)
    
            private constant boolean MOVE_TO_MAX = false
    //if true this will move units to max range and not past it
    
            private constant boolean IGNORE_UNIT_PATHING = false
    //if true this push will ignore unit pathing
    
            private constant boolean IGNORE_PATHING = false
    //if this is true the push will ignore pathing period
    
            private constant real DURATION = 0.5
    //this is the max duration of  the push, when set to 0 it will be instant
    
            private constant real INTERVAL = 0.02
    //CAN NOT BE 0.00, this is the interval at which the push is issued, frequency relates directly with smoothness and lag
    
            private constant boolean STUN = true
    //set to false if you dont want the units to be stunned
    
            private timer RCLLTIMER = CreateTimer() //DO NOT CHANGE
        endglobals
        
        struct RCLL extends array
            unit pushTarget
            real changeX
            real changeY
            integer changeCount
            
            integer next
            integer previous
            
            static integer array recycleList
            static integer lastRecycled = 0
            static integer listSize = 0
            
            private static method Allocate takes nothing returns thistype
                local integer i = RCLL.recycleList[0]
                if (i == 0) then
                    set RCLL.listSize = RCLL.listSize + 1
                    return RCLL.listSize
                endif
                set RCLL.recycleList[0] = RCLL.recycleList[i]
                set RCLL.recycleList[i] = 0
                return i
            endmethod
            
            static method linkUnit takes unit u, real x, real y returns nothing
                local thistype this = thistype.Allocate()
                set this.pushTarget = u
                set this.changeX = x
                set this.changeY = y
                set this.changeCount = 0
                set this.next = 0
                set this.previous = thistype[0].previous
                set thistype[thistype[0].previous].next = this
                set thistype[0].previous = this
            endmethod
        
            static method removeLink takes integer i returns nothing
                set thistype[thistype[i].previous].next = thistype[i].next
                set thistype[thistype[i].next].previous = thistype[i].previous
                set thistype.recycleList[thistype.lastRecycled] = i
                set thistype.lastRecycled = i
                set thistype.recycleList[i] = 0
            endmethod
        endstruct
    
        private function Core takes nothing returns nothing
            local integer i = RCLL[0].next
            local location a
            local real x
            local real y
            loop
                if RCLL[0].next == 0 then
                    call PauseTimer(RCLLTIMER)
                endif
                exitwhen i == 0
                if IGNORE_UNIT_PATHING == true then
                    call SetUnitPathing(RCLL[i].pushTarget, false)
                elseif IGNORE_PATHING == true then
                    call SetUnitPathing(RCLL[i].pushTarget, false)
                endif
                if STUN then
                    call PauseUnit(RCLL[i].pushTarget, true)
                endif
                set a = GetUnitLoc(RCLL[i].pushTarget)
                set x = GetLocationX(a)
                set y = GetLocationY(a)
                call SetUnitX(RCLL[i].pushTarget, RCLL[i].changeX + x)
                call SetUnitY(RCLL[i].pushTarget, RCLL[i].changeY + y)
                if IGNORE_PATHING == false then
                if IGNORE_UNIT_PATHING == false then
                    call SetUnitPathing(RCLL[i].pushTarget, true)
                endif
                endif
                set RCLL[i].changeCount = RCLL[i].changeCount + 1
                if RCLL[i].changeCount == R2I(DURATION / INTERVAL) then
                    if IGNORE_PATHING or IGNORE_UNIT_PATHING then
                        call SetUnitPathing(RCLL[i].pushTarget, true)
                    endif
                    if STUN then
                        call PauseUnit(RCLL[i].pushTarget, false)
                    endif
                    call RCLL.removeLink(i)
                endif
                set a = null
                set i = RCLL[i].next
            endloop
        endfunction
        
        private function GroupFilter takes nothing returns boolean
            local boolean bool
            set bool = not IsUnitType(GetFilterUnit(), UNIT_TYPE_MAGIC_IMMUNE)
            set bool = bool and not IsUnitType(GetFilterUnit(), UNIT_TYPE_FLYING)
            set bool = bool and not IsUnitType(GetFilterUnit(), UNIT_TYPE_MECHANICAL)
            set bool = bool and not IsUnitType(GetFilterUnit(), UNIT_TYPE_STRUCTURE)
            set bool = bool and not IsUnitType(GetFilterUnit(), UNIT_TYPE_DEAD)
            return bool
        endfunction
        
        private function OnInitActions takes nothing returns boolean
            local real rx
            local real ry
            local group g = CreateGroup()
            local unit u
            local real x = GetUnitX(GetTriggerUnit())
            local real y = GetUnitY(GetTriggerUnit())
            local real bx
            local real by
            local real r
            if GetSpellAbilityId() == SPELL_ID then
                 call GroupEnumUnitsInRange(g, x, y, 450, Filter(function GroupFilter))
                 loop
                     set u = FirstOfGroup(g)
                     exitwhen (u == null)
                     if IsUnitEnemy(u,GetOwningPlayer(GetTriggerUnit())) then
                         set bx = GetUnitX(u)
                         set by = GetUnitY(u)
                             set r = bj_RADTODEG * Atan2(by - y, bx - x)
                         if (MOVE_TO_MAX == true) then
                             set rx = bx + 450 * Cos(r * bj_DEGTORAD)
                             set ry = by + 450 * Sin(r * bj_DEGTORAD)
                         elseif (MOVE_TO_MAX == false) then
                             set rx = x + 450 * Cos(r * bj_DEGTORAD)
                             set ry = y + 450 * Sin(r * bj_DEGTORAD)
                         endif
                         set rx = ((rx - x) /(DURATION / INTERVAL))
                         set ry = ((ry - y)/(DURATION / INTERVAL))
                         call RCLL.linkUnit(u, rx, ry)
                     elseif (IsPlayerAlly(GetOwningPlayer(GetTriggerUnit()), GetOwningPlayer(u)) == true) then
                         call SetUnitState(u, UNIT_STATE_LIFE, (GetUnitState(u, UNIT_STATE_LIFE) + 100.0 + (75.0 * GetUnitAbilityLevel(GetTriggerUnit(), SPELL_ID))))
                     endif
                     call GroupRemoveUnit(g, u)
                 endloop
            call TimerStart(RCLLTIMER, INTERVAL, true, function Core)
            endif
            call DestroyGroup(g)
            set g = null
            set u = null
            return true
        endfunction
        
        private function OnInit takes nothing returns nothing
            local trigger t = CreateTrigger()
            call TriggerRegisterAnyUnitEventBJ(t, EVENT_PLAYER_UNIT_SPELL_EFFECT)
            call TriggerAddCondition(t, Filter(function OnInitActions))
            set t = null
        endfunction
    endscope
    
     
  2. Dorae.Mun

    Dorae.Mun Mr & Ms Pac-Man

    Tham gia ngày:
    9/11/11
    Bài viết:
    243
    Nơi ở:
    Thế kỉ 22
    bác đọc kỹ cái này:
    bác sửa lại thành IGNORE_PATHING =true xem! nó có nghĩa là bỏ qua pathing mà (em hiểu path là con đường )
     
  3. fantom2409

    fantom2409 Mr & Ms Pac-Man

    Tham gia ngày:
    15/8/11
    Bài viết:
    194
    Cho mình hỏi làm sao để làm dc một skill càng đánh càng nhanh như fevor của Troll trong Dota??
     
  4. btvinh

    btvinh Donkey Kong

    Tham gia ngày:
    15/1/11
    Bài viết:
    343
    cái này xài dạng increase level ability đó em
     
  5. Ngoc LeO

    Ngoc LeO Mario & Luigi

    Tham gia ngày:
    23/7/06
    Bài viết:
    839
    Nơi ở:
    Nothing...
    Mình thì xài

    Unit attacked hoặc take damage

    rồi dùng cái item tăng attack speed tăng tốc độ đánh (dùng thử cái slow aura nếu hero die = dis game)

    cứ mỗi phát đánh thì tăng 1 cấp,max là 15 cấp

    rồi wait 5s lại trừ

    Mã:
    Events
        Unit - A unit Is attacked
    Conditions
        (Unit-type of (Attacking unit)) Equal to |cff00ff00L©m tÆc|r
        ((Level of Lam Tac Str Speed  for (Attacking unit)) Greater than or equal to 1) and ((Level of Lam Tac Str Speed  for (Attacking unit)) Less than or equal to 10)
    Actions
        Unit - Set level of Lam Tac Str Speed  for (Attacking unit) to ((Level of Lam Tac Str Speed  for (Attacking unit)) + 1)
        Wait 5.00 seconds
        Unit - Set level of Lam Tac Str Speed  for (Attacking unit) to ((Level of Lam Tac Str Speed  for (Attacking unit)) - 1)
    
     
    Chỉnh sửa cuối: 6/12/11
  6. NickKuls

    NickKuls Youtube Master Race

    Tham gia ngày:
    28/11/11
    Bài viết:
    22
    Wait kiểu này ko dùng biến local mà ko sợ lỗi à? :|

    ---------- Post added at 22:36 ---------- Previous post was at 22:34 ----------

    Mà như thế này nó spam S cho vài phát là full attack speed ngay 8-}
     
  7. game_war48

    game_war48 Dragon Quest

    Tham gia ngày:
    7/9/08
    Bài viết:
    1,320
    Nơi ở:
    Ice City
  8. Drakkar Knight

    Drakkar Knight Mr & Ms Pac-Man Lão Làng GVN

    Tham gia ngày:
    13/11/11
    Bài viết:
    270
    Nơi ở:
    Hà Nội
    Các anh cho em hỏi làm sao để cho hero lại gần mới nhận exp vậy? Em làm map rồi vào chơi thử thì con hero đứng ở nhà mà cứ lên cấp vùn vụt thôi.
     
  9. Evil_Hunter

    Evil_Hunter Mario & Luigi

    Tham gia ngày:
    18/9/11
    Bài viết:
    786
    Nơi ở:
    Evil Forest
    Mọi người cho hỏi trigger này sao nó ko move con dummy đi, đã check kĩ nhưng vì trình độ có hạn nên... :(
    [spoil]
    Mã:
    [B]Explosive Bird
        Events
            Unit - A unit Starts the effect of an ability
        Conditions
            (Ability being cast) Equal to |cff99CCFFExplosive Bird|r 
        Actions
            Set Caster[5] = (Casting unit)
            Set Point[6] = (Target point of ability being cast)
            Set Point[7] = (Position of Caster[5])
            If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                If - Conditions
                    (Caster[5] has an item of type |cff99CCFFBÝch Thñy Hµm §µm|r) Equal to True
                Then - Actions
                    Set Damage[5] = (Real(((Agility of Caster[5] (Include bonuses)) x 15)))
                Else - Actions
                    Set Damage[1] = (Real(((Agility of Caster[5] (Include bonuses)) x (Level of |cff99CCFFExplosive Bird|r  for Caster[5]))))
            Unit - Create 1 Dummy E1 for (Owner of Caster[5]) at Point[7] facing (Facing of Caster[5]) degrees
            Set Dummy[1] = (Last created unit)
            Unit - Turn collision for Dummy[1] Off
            Unit - Add a 1.60 second Generic expiration timer to Dummy[1]
            Trigger - Turn on Explosive Bird Loop <gen>[/B]
    
    Mã:
    [B]Explosive Bird Loop
        Events
            Time - Every 0.04 seconds of game time
        Conditions
        Actions
            Set Point[7] = (Position of Caster[5])
            Set Point[8] = (Point[7] offset by 40.00 towards (Angle from Point[7] to Point[6]) degrees)
            If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                If - Conditions
                    (Distance between Point[7] and Point[6]) Less than or equal to 20.00
                Then - Actions
                    Trigger - Turn off (This trigger)
                    Animation - Play Caster[5]'s spell animation
                    Wait 0.50 game-time seconds
                    Set Group[5] = (Units within 500.00 of Point[6] matching ((((Matching unit) is alive) Equal to True) and (((Matching unit) belongs to an enemy of Player 9 (Gray)) Equal to True)))
                    Unit Group - Pick every unit in Group[5] and do (Actions)
                        Loop - Actions
                            Unit - Cause Caster[5] to damage (Picked unit), dealing Damage[5] damage of attack type Hero and damage type Universal
                            Special Effect - Create a special effect attached to the chest of (Picked unit) using Abilities\Spells\Other\ImmolationRed\ImmolationREDTarget.mdl
                            Special Effect - Destroy (Last created special effect)
                    Animation - Queue Caster[5]'s stand animation
                    Custom script:   call RemoveLocation(udg_Point[6])
                    Custom script:   call RemoveLocation(udg_Point[7])
                    Custom script:   call RemoveLocation(udg_Point[8])
                    Custom script:   call DestroyGroup(udg_Group[5])
                Else - Actions
                    Animation - Play Caster[5]'s spell animation
                    Unit - Move Dummy[1] instantly to Point[8]
                    Custom script:   call RemoveLocation(udg_Point[7])
                    Custom script:   call RemoveLocation(udg_Point[8])[/B]
    
    [/spoil]
     
  10. Dorae.Mun

    Dorae.Mun Mr & Ms Pac-Man

    Tham gia ngày:
    9/11/11
    Bài viết:
    243
    Nơi ở:
    Thế kỉ 22
    Lỗi ở hai chỗ đó thôi ạ!Bác check lại!
     
  11. Ngoc LeO

    Ngoc LeO Mario & Luigi

    Tham gia ngày:
    23/7/06
    Bài viết:
    839
    Nơi ở:
    Nothing...
    Mình chả biết biến local là sao cả,ngôn ngữ WE mình mù tịt lắm,chỉ biết làm thôi. :">
    Vậy mình mới đưa ra hai event unit take damage hoặc attacked đó thôi
     
  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
    Sure là cậu đang gặp vấn đề nghiêm trọng trong việc tư duy logic !!!

    - Point[6] cậu dùng xuyên suốt cả quãng slide vậy mà cậu xóa nhẹm nó đi ngay lần đầu tiên chạy trigger Explosive Bird Loop
    Point[7] cũng tương tự vậy nhưng thật may thay là có cái dòng Set Point[7] = (Position of Caster[5])

    - Nhưng cho tớ hỏi cậu là con dummy của cậu bay thẳng đúng ko?
    Vậy cậu ko thấy vô lý sao khi mà cứ lặp lại liên tục việc lấy 1 cái point Position of Caster[5] ?
    Nếu con hero của cậu mà dùng waygate chả hạn rồi bay ra 1 chỗ mà tạo thành với vị trí lúc cast và cast point 1 góc 90 độ thì có phải dummy của cậu sẽ bay ngang như con cua :-o

    - mà đấy là nói nếu Point[8] của cậu lấy chuẩn thì nó mới bay được như cua
    Nhưng Point[8] của cậu là lấy vị trí từ tiến lên 40 range so với thằng cast. tức nếu thằng cast ko di chuyển target spell Point[6] chắc chắn là cũng ko đổi vậy thì nó đứng yên là hoàn toàn hợp lý và đừng hỏi tại sao :-??

    - Mà sau khi coi lại thấy chỗ deal dam của cậu dùng cái Damage[5] mà cậu để là Damage[1] thì đến lúc nó vào trường hợp kia thì dam = ???? :|

    - Tôi còn ko hiểu 1 cái nữa là tại sao cậu là để
    Unit - Add a 1.60 second Generic expiration timer to Dummy[1]
    Thế nếu chưa hết 1.6s thì dummy cậu vẫn sống nhăn răng dù đã đi hết quãng đường à !?

    - Rồi sau khi hero cậu cast xong ko về được tư thế stand nữa hay sao mà phải có dòng
    Animation - Queue Caster[5]'s stand animation

    Tóm lại cần sửa như sau

    [spoil]
    Mã:
    [B]Explosive Bird
        Events
            Unit - A unit Starts the effect of an ability
        Conditions
            (Ability being cast) Equal to |cff99CCFFExplosive Bird|r 
        Actions
            Set Caster[5] = (Casting unit)
            Set Point[6] = (Target point of ability being cast)
            Set Point[7] = (Position of Caster[5])
            If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                If - Conditions
                    (Caster[5] has an item of type |cff99CCFFBÝch Thñy Hµm §µm|r) Equal to True
                Then - Actions
                    Set Damage[5] = (Real(((Agility of Caster[5] (Include bonuses)) x 15)))
                Else - Actions
                    Set Damage[[COLOR="#FF0000"]5[/COLOR]] = (Real(((Agility of Caster[5] (Include bonuses)) x (Level of |cff99CCFFExplosive Bird|r  for Caster[5]))))
            Unit - Create 1 Dummy E1 for (Owner of Caster[5]) at Point[7] facing (Facing of Caster[5]) degrees
            [COLOR="#FF0000"]Custom script:   call RemoveLocation(udg_Point[7])[/COLOR]
            Set Dummy[1] = (Last created unit)
            Unit - Turn collision for Dummy[1] Off
            Trigger - Turn on Explosive Bird Loop <gen>[/B]
    
    Mã:
    [B]Explosive Bird Loop
        Events
            Time - Every 0.04 seconds of game time
        Conditions
        Actions
            Set Point[7] = (Position of [COLOR="#FF0000"]Dummy[1][/COLOR])
            Set Point[8] = (Point[7] offset by 40.00 towards (Angle from Point[7] to Point[6]) degrees)
            If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                If - Conditions
                    (Distance between Point[7] and Point[6]) Less than or equal to 20.00
                Then - Actions
                    Trigger - Turn off (This trigger)
                    Animation - Play Caster[5]'s spell animation
                    Wait 0.50 game-time seconds
                    Set Group[5] = (Units within 500.00 of Point[6] matching ((((Matching unit) is alive) Equal to True) and (((Matching unit) belongs to an enemy of Player 9 (Gray)) Equal to True)))
                    Unit Group - Pick every unit in Group[5] and do (Actions)
                        Loop - Actions
                            Unit - Cause Caster[5] to damage (Picked unit), dealing Damage[5] damage of attack type Hero and damage type Universal
                            Special Effect - Create a special effect attached to the chest of (Picked unit) using Abilities\Spells\Other\ImmolationRed\ImmolationREDTarget.mdl
                            Special Effect - Destroy (Last created special effect)
                    Animation - Queue Caster[5]'s stand animation
                    [COLOR="#FF0000"]Unit - Remove Dummy[1][/COLOR]
                    Custom script:   call RemoveLocation(udg_Point[6])
                    Custom script:   call DestroyGroup(udg_Group[5])
                Else - Actions
                    Unit - Move Dummy[1] instantly to Point[8]
            [COLOR="#FF0000"]Custom script:   call RemoveLocation(udg_Point[7])
            Custom script:   call RemoveLocation(udg_Point[8])[/COLOR][/B]
    
    [/spoil]

    - Point 7 ở trigger đầu tiền xóa lun vì là temp point ko có tác dụng trong trigger khác
    - Bỏ cái generic time cho dummy thay vào đó là remove nó hoặc kill nó đi sau khi đã hoàn thành việc slide
    - Point 7 và 8 là biến tạm thời nên mỗi lần dùng xong remove leak lun nên bỏ ra ngoài tất cả các cái if và ngang hàng với dòng Set giá trị ....
    - Thiết lập lai là Damage[5]
    - Point 7 là vị trí dummy point 8 là vị trí tiến lên 40 range so với point 7 hướng từ chỗ caster ban đầu về điểm cast.
    - Bỏ dòng Animation - Queue Caster[5]'s stand animation chả để làm gì cả

    P/S: cậu làm spell thì tập trung và suy nghĩ liền mạch hộ cái...
    Cóng vãi '+_+ sao hum nay mình nói nhiều vậy :-@
     
    Chỉnh sửa cuối: 7/12/11
  13. FlameDrake

    FlameDrake Dragon Quest

    Tham gia ngày:
    1/12/10
    Bài viết:
    1,298
    Nơi ở:
    Quận 10 HCM
    Bác check lại mấy dòng đỏ trên là sẽ hiểu :D và 1 cái bất tiện nữa là nếu thằng kia nó cast con chim wa TR bên cạnh thì nạn ks chửi nhau sẽ lại rộn lên =))
     
    Chỉnh sửa cuối: 7/12/11
  14. faustviii

    faustviii Mr & Ms Pac-Man

    Tham gia ngày:
    28/1/09
    Bài viết:
    110
    cho em hỏi có tất cả bao nhiêu loại animation,và nếu có thể các bác chỉ cho em các loại được ko:-<
    đến bây h thì em mới có chút ít vốn về cái phần này nên unit trông khô khan qá :-<
    1/Art-Requirred Animation names có những loại nào
    2/Art-Animation names có những loại nào :-<
    thnks các bác
     
  15. 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
    animation có nhiều hay ít tùy vào unit đó sở hữu bao nhiêu thôi :-??

    thường thì có Stand và Walk hoặc Death hay là Attack còn là Spell v.v.. :-?
     
  16. Dorae.Mun

    Dorae.Mun Mr & Ms Pac-Man

    Tham gia ngày:
    9/11/11
    Bài viết:
    243
    Nơi ở:
    Thế kỉ 22
    ai làm giúp em cái chiêu của bar trong Diablo 2 với, nó bay lên rồi rớt xuống gây dam area và độ cao phụ thuộc khoảng cách nhưng em muốn cho độ cao ngẫu nhiên tí !
    + giúp em làm chiêu như LMTK của Kiếm đoàn trong map TK lun!^^
     
  17. FlameDrake

    FlameDrake Dragon Quest

    Tham gia ngày:
    1/12/10
    Bài viết:
    1,298
    Nơi ở:
    Quận 10 HCM
    Mọi người cho hỏi, ví dụ có 1 dãy số: 1, 15, 25, 30, 150
    Ở đây số lớn nhất là 150, vậy không biết hàm Conditon nào có thể check đc ra trong 1 dãy số chọn ra số lớn nhất ( 150 )
     
  18. raivor

    raivor Dragon Quest Lão Làng GVN

    Tham gia ngày:
    24/7/09
    Bài viết:
    1,411
    Nhớ không nhầm thì là math - max.
     
  19. Drakkar Knight

    Drakkar Knight Mr & Ms Pac-Man Lão Làng GVN

    Tham gia ngày:
    13/11/11
    Bài viết:
    270
    Nơi ở:
    Hà Nội
    Ko ai chỉ cho em à?
    (30 kí tự)
     
  20. FlameDrake

    FlameDrake Dragon Quest

    Tham gia ngày:
    1/12/10
    Bài viết:
    1,298
    Nơi ở:
    Quận 10 HCM
Trạng thái chủ đề:
Không mở trả lời sau này.

Chia sẻ trang này