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

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

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

    Ngoc LeO Mario & Luigi

    Tham gia ngày:
    23/7/06
    Bài viết:
    839
    Nơi ở:
    Nothing...
    Làm sao để làm được chế độ obs như Dota vậy mọi người...
    Làm sao để các unit neutral trên minimap hiển thị màu mình muốn (ví dụ unit của player 1 red thì trên minimap các unit đó hiển thị bằng chấm đỏ,chung tất cả các unit neutral sẽ có màu xanh tím than)
     
    Chỉnh sửa cuối: 19/6/12
  2. Ice Dragon

    Ice Dragon Mega Man

    Tham gia ngày:
    6/9/04
    Bài viết:
    3,101
    Nơi ở:
    none
    Cám ơn anh Tom. Từ h về sau phải để ý mấy hàm có trả về boolean mơi đc :D

    Câu này là em hỏi nếu dùng hashtable có bất lợi thì còn có những phương pháp nào thay thể hashtable để, ví dụ, "Khi unit bị Player(0) chọn thì tạo timer chờ sau 3 giây giết unit đó". Nếu dùng hashtable thì em lưu unit đó vào key HandleId của timer ròi lúc timer chạy chì đọc trong hashtable đã lưu để lấy unit cần giết. Em muốn hỏi nếu ko dùng hashtable thì có cách nào khác làm ko.

    Giống như trên mình nói đó, có cách nào để thay thế việc dùng hashtable trong ví dụ trên ko vậy? (mình chỉ biết dùng JASS, ko biết vJass/cJass gì cả :D)

    View attachment ITT Rect.rar
    Ví dụ như cái map này, mình mún khi hero đi lại gần cái trụ thì đc có 6 slot inventory, khi đi ra thì trả lại số slot cũ. Mình dùng hashtable cho cái này.
     
    Chỉnh sửa cuối: 19/6/12
  3. WorldCyberGame

    WorldCyberGame Youtube Master Race

    Tham gia ngày:
    18/6/12
    Bài viết:
    48
    Nơi ở:
    tpHCM
    1) obs ??? Khi creat game bạn thử nhấn vào Advanced Option và click Full Obs xem =))
    2) bất khả thi. Bởi vì trên minimap unit của player nào thì hiện màu player đó thôi
     
  4. truongdzuy

    truongdzuy Mr & Ms Pac-Man

    Tham gia ngày:
    25/1/09
    Bài viết:
    274
    Nơi ở:
    Tp.HCM
    Bạn xem thử giúp mình nào ... mình thì set chắc cũng dc 1/2 :D ........ chỉ bí lúc chạy biến HP MP phù hợp vs từng Unit thôi ..... tks
     

    Các file đính kèm:

    • test.zip
      Kích thước:
      18.8 KB
      Đọc:
      5
  5. Daric™

    Daric™ C O N T R A

    Tham gia ngày:
    7/3/12
    Bài viết:
    1,853
    Nơi ở:
    Porizon
    mình góp ý cho cách làm của bạn là thế này nhé:
    Nếu trong map của bạn không đụng và dùng đến Unit - Custom Value (UserData) thì nên vận dụng nó làm các biến array hơn
    Ban đầu, ta có một biến integer, mỗi lần gán một giá trị của một unit, ta cộng integer thêm 1, sau đó dùng hàm Unit - Set Custom Value để chỉnh giá trị của unit được chọn đấy là giá trị của biến integer.
    Mỗi giây của bạn sẽ lưu lại HP,MP,Position array của unit đó với đơn vị array tương ứng với Custom Value mà unit đó đang sở hữu, Và phải có một integer array, đơn vị array tương ứng với Custom Value luôn. và sẽ tick các giá trị từ 1-5, lớn hơn 5 sẽ tick lại về 1, nó sẽ biết và xác định rằng hiện tại trong vòng 5 s, hero sẽ ở giây thứ bao nhiêu, như vậy khi ở giây thứ 1, ta lưu vào giá trị HP1[a], giây thứ 2, ta lưu vào giá trị HP2[a],v.v....
    Tuy như vậy rất cực nhưng đó là do bạn chọn!
    Lưu ý khi sử dụng trigger kiểu này, nên lưu lại các giá trị thuộc biến real, ngay cả position cũng nên chia làm X,Y, như vậy sẽ ít leak hơn.
     
  6. vuongkkk

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

    Tham gia ngày:
    22/5/10
    Bài viết:
    588
    Nơi ở:
    Hà Nội
    Mình xin phép nói lại cho rõ:
    - Chậm hơn so với array nhưng có những cái array ko làm được như là array 2 chiều và array với index là 1 số lớn
    - Dùng hashtable thì chỉ có thể chơi map trên ver 1.24+ nhưng mà hầu như mọi người đều dùng thế này rồi. Còn ko thêm 1 cái comment là dùng trên bản này thì người chơi tự dùng switch ver là ổn
    Tức là miễn là đừng dùng hashtable với tần suất lớn như là loop 0.03s 1 lần chả hạn thì ko sao cả. Và nhớ lưu ý là 1 hashtable gần như đã là đủ cho cả map nên đừng tạo quá nhiều hashtable nếu ko cần thiết là được

    Ví dụ thay thế:
    -Khi unit bị Player(0) chọn thì tạo timer chờ sau 3 giây giết unit đó
    + Tạo 2 biến array unit selectU[MAX_PLAYER] và array integer count[MAX_PLAYER], 1 biến timer
    + Nếu Player 1 chọn thì set unit[1]=TriggerUnit rồi start timer period 0.5s
    + function onPeriod: loop i ->MAX_PLAYER if unit!= null then count=count+1. Nếu count==6 thì set count=0 và kill unit

    -khi hero đi lại gần cái trụ thì đc có 6 slot inventory, khi đi ra thì trả lại số slot cũ.
    Cách 1: Vẫn dùng hashtable nhưng mà khi init trigger thì setup lun hero rawid nào thì có invID nào. Đến khi enter/leave region chỉ việc lấy ra từ hero rawid để remove/add
    Cách 2: Dùng system unit indexer như AIDS hay UnitIndexer hoặc AutoIndex để lưu inv ability thay vì hashtable
     
  7. Ăn xong dong

    Ăn xong dong Mr & Ms Pac-Man

    Tham gia ngày:
    7/6/11
    Bài viết:
    136
    Zậy cho e hỏi làm đc cái spell này :(: hero có spell Endurance Aura thì tất cả các unit trong 900AoE đều đc add 1 spell A(Spell A này ko có hiện icon). Cái e thắc mắc là khi unit đi vào trog bán kính spell Endurance Aura thì add spell. Event e ko bik sao. condition chắc là: khi có Buff A action: add spell. vs lại e ko bik làm trigger khi ra ngoài phạm vi AoE Endurance Aura hay mất buff thì remove spell A đi. Mog các bác zúp e :(
     
  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
    Ăn xong dong thích bài này.
  9. toanlove371

    toanlove371 Youtube Master Race

    Tham gia ngày:
    11/10/11
    Bài viết:
    30
    cho em hỏi về Event-Unit take damage. Làm sao để Unit nhận biến dc, chỉ thấy nó lấy unit đang có trên map thôi, còn Event-A unit .... thì ko có take damage
    để làm skill Overload của Storm trong Dota ấy
     
  10. Daric™

    Daric™ C O N T R A

    Tham gia ngày:
    7/3/12
    Bài viết:
    1,853
    Nơi ở:
    Porizon
    À, cách làm của nó tương tự vầy:http://forums.gamevn.com/showthread.php?476408-Tutorial-How-to-make-custom-Auto-Cast-spells, chỉ cần bạn hiểu và chỉnh sửa tốt trigger thứ 3 là xong!
     
  11. Tom_Kazansky

    Tom_Kazansky

    Tham gia ngày:
    28/12/06
    Bài viết:
    3,454
    Nơi ở:
    Hà Nội
    - phải sử dụng "specific unit" event
    - pick các unit trên map, add event take damage cho các unit này
    - khi một unit enter map, add event take damage cho unit này
    - xử lý tại trigger được add event unit take damage

    demo: [Spell] Overload.w3x
     
  12. langthangbairac

    langthangbairac T.E.T.Я.I.S

    Tham gia ngày:
    19/5/12
    Bài viết:
    594
    Nơi ở:
    Thanh Chương
    Back ra ngoài đi. Tôi có bài làm cái phản dame ở ngoài đấy.
     
  13. WorldCyberGame

    WorldCyberGame Youtube Master Race

    Tham gia ngày:
    18/6/12
    Bài viết:
    48
    Nơi ở:
    tpHCM
    đây lả trigger (tương tự như 11 player còn lại cũng làm y chang vậy):
    Mã:
    Untitled Trigger 1
        Events
            Unit - A unit Dies
        Conditions
            ((Dying unit) is A Hero) Equal to True
        Actions
            If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                If - Conditions
                    (Owner of (Killing unit)) Equal to Player 1 (Red)
                Then - Actions
                    Set Kills[1] = (Kills[1] + 1)
                Else - Actions
            If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                If - Conditions
                    (Owner of (Dying unit)) Equal to Player 1 (Red)
                Then - Actions
                    Set Deaths[1] = (Deaths[1] + 1)
                Else - Actions
    Victory Defeat
        Events
            Unit - A unit Dies
        Conditions
            ((Dying unit) is A Hero) Equal to True
        Actions
            If (((Dying unit) belongs to an enemy of Player 1 (Red)) Equal to True) then do (Set Kill1 = (Kills[1] + (Kills[2] + (Kills[3] + (Kills[4] + (Kills[5] + Kills[6])))))) else do (Set Kill2 = (Kills[7] + (Kills[8] + (Kills[9] + (Kills[10] + (Kills[11] + Kills[12]))))))
            If (Kill1 Equal to 2) then do (Player Group - Pick every player in (All allies of Player 1 (Red)) and do (Game - Victory (Picked player) (Show dialogs, Show scores))) else do (Do nothing)
            If (Kill1 Equal to 2) then do (Player Group - Pick every player in (All enemies of Player 1 (Red)) and do (Game - Defeat (Picked player) with the message: <Empty String>)) else do (Do nothing)
            If (Kill2 Equal to 2) then do (Player Group - Pick every player in (All allies of Player 7 (Green)) and do (Game - Victory (Picked player) (Show dialogs, Show scores))) else do (Do nothing)
            If (Kill2 Equal to 2) then do (Player Group - Pick every player in (All enemies of Player 7 (Green)) and do (Game - Defeat (Picked player) with the message: <Empty String>)) else do (Do nothing)
    mà vẫn ko hiểu sao kill tổng vẫn ko đc
     
  14. Daric™

    Daric™ C O N T R A

    Tham gia ngày:
    7/3/12
    Bài viết:
    1,853
    Nơi ở:
    Porizon
    thử sửa chỗ màu đỏ thành Greater than or Equal to xem :5cool_ops:
     
  15. WorldCyberGame

    WorldCyberGame Youtube Master Race

    Tham gia ngày:
    18/6/12
    Bài viết:
    48
    Nơi ở:
    tpHCM
    hay hay hay, bái phục bái phục :-bd:)). còn vấn đề này nữa, sao nó lại ko hoạt động nhỉ:
    Mã:
    HeroReviveInitialization
        Events
            Time - Elapsed game time is 0.00 seconds
        Conditions
        Actions
            For each (Integer A) from 1 to 12, do (Actions)
                Loop - Actions
                    Trigger - Add to HeroRevive <gen> the event (Time - ReviveTimer[(Integer A)] expires)Hero Dies
        Events
            Unit - A unit Dies
        Conditions
            ((Triggering unit) is A Hero) Equal to True
        Actions
            Set TempUnit = (Triggering unit)
            Set TempInt = (Player number of (Owner of TempUnit))
            Set TempReal = (0.00 + (2.00 x (Real((Hero level of TempUnit)))))
            Countdown Timer - Start ReviveTimer[TempInt] as a One-shot timer that will expire in TempReal seconds
            Countdown Timer - Create a timer window for ReviveTimer[TempInt] with title (Name of TempUnit)
            Set ReviveTimerWindow[TempInt] = (Last created timer window)
            Countdown Timer - Show ReviveTimerWindow[TempInt]
            Set HeroForRevive[TempInt] = TempUnit
    HeroRevive
        Events
        Conditions
        Actions
            For each (Integer A) from 1 to 12, do (Actions)
                Loop - Actions
                    Set TempInt = (Integer A)
                    Custom script:   set udg_TempCheck = ( GetExpiredTimer() == udg_ReviveTimer[ udg_TempInt ] )
                    If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        If - Conditions
                            TempCheck Equal to True
                        Then - Actions
                            If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                If - Conditions
                                    (HeroForRevive[TempInt] belongs to an ally of Player 1 (Red)) Equal to True
                                Then - Actions
                                    Set TempLoc = (Center of Region 000 <gen>)
                                Else - Actions
                                    Set TempLoc = (Center of Region 000 Copy <gen>)
                            Hero - Instantly revive HeroForRevive[TempInt] at TempLoc, Show revival graphics
                            Custom script:   call RemoveLocation( udg_TempLoc )
                            Countdown Timer - Destroy ReviveTimerWindow[TempInt]
                        Else - Actions
    đây lả demo respawn hero
     
  16. truongdzuy

    truongdzuy Mr & Ms Pac-Man

    Tham gia ngày:
    25/1/09
    Bài viết:
    274
    Nơi ở:
    Tp.HCM
    cho hỏi cách làm skill này, khi cứ giết 2 mạng người sẽ giúp cho mình hưởng dc 1 mạng thêm , tức là khi chết sẽ dc hồi sinh lại ( như Renaincation mà skill này là bonus hồi sinh theo lượng hero mà mình giết ) ...... maximum là 1/2/3 mạng
    Cho hỏi thêm về con Geomancer trong DotA ...... ulti nó tạo ra n~ con y hệt nó, là type Hero hay Unit thế ạ ? .... bởi vì 1 trong 3 con chết là cả đám chết hết, nhưng khi ghi hiển thị ( Meepo - The Geomancer ( LEvel .... ) Has been slain ) thì chỉ có 1 chứ k fải 3 ..... mà khi 1 con up lv thì 3 con kia cũng bjk up ... v. có fải loại hero nhưng DotA dùng system hiển thị khác map thường k ạ ?
     
    Chỉnh sửa cuối: 19/6/12
  17. Ngoc LeO

    Ngoc LeO Mario & Luigi

    Tham gia ngày:
    23/7/06
    Bài viết:
    839
    Nơi ở:
    Nothing...
    1. Cái này mình cũng biết làm,nhưng quan trọng ở đây là mình muốn tìm hiểu cách của Dota
    Theo mình xem ở map thì Obs của Dota ở hai slot Red và Green. Các unit creep binh linh của hai team là của Neutral Victim và Extra,mình nghĩ vậy bởi vì khi bật chế độ Obs xem trên mini map tất cả các unit hai team sẽ có màu xanh tím than.

    Còn đổi màu unit trên mini map thì chỉ cần chỉnh Player - Change Color.

    Nhưng cái mình muốn tìm hiểu là set Neutral Victim và Extra là Allies thì làm thế nào trên minimap cũng không hiển thị màu đồng minh (màu xanh da trời) mà nó vẫn màu xanh tím than. Nhưng ở map Dota nó lại khác,vậy đó...

    Mình không có nhiều vốn tiếng Anh nên không đi xa xôi hỏi cũng như nghiên cứu đc...
     
  18. Evil_Hunter

    Evil_Hunter Mario & Luigi

    Tham gia ngày:
    18/9/11
    Bài viết:
    786
    Nơi ở:
    Evil Forest
    Mình đang làm skill dạng phóng ra một tia lửa, base từ Immolation, khi turn on thì phóng, turn off thì mất. Mình làm thêm 2 skilll phụ để tăng/giảm độ dài của tia lửa. tăng thì ok nhưng giảm thì sẽ có 2 dummy bị tách ra ngoài, biết là vậy nhưng mình ko biết sao để nó remove 2 dummy đó. Mong các bạn giúp :">

    [spoil]
    Mã:
    Init
        Events
            Map initialization
        Conditions
        Actions
            Visibility - Disable fog of war
            Visibility - Disable black mask
            Set Integer = 15
    
    Mã:
    Sun Ray
        Events
            Unit - A unit Is issued an order with no target
        Conditions
            (Issued order) Equal to Night Elf Demon Hunter - Activate Immolation
        Actions
            Set Integer = 15
            Set Caster = (Ordered unit)
            Set Point = (Position of Caster)
            Set Pointother = (Point offset by 150.00 towards (Facing of Caster) degrees)
            Set Mana = (((Max mana of Caster) x 0.04) / 25.00)
            For each (Integer A) from 1 to Integer, do (Actions)
                Loop - Actions
                    Set Point2 = (Pointother offset by ((Real((Integer A))) x 50.00) towards (Facing of Caster) degrees)
                    Unit - Create 1 Dummy for (Owner of Caster) at Point2 facing Default building facing degrees
                    Unit - Turn collision for Dummy[(Integer A)] Off
                    Set Dummy[(Integer A)] = (Last created unit)
            Unit - Set life of Caster to ((Life of Caster) - ((Max life of Caster) x 0.20))
            Unit - Add Increase Distance  to Caster
            Unit - Add Decrease Distance  to Caster
            Trigger - Turn on Loop Sun Ray <gen>
            Custom script:   call RemoveLocation(udg_Point)
            Custom script:   call RemoveLocation(udg_Point2)
            Custom script:   call RemoveLocation(udg_Pointother)
    
    Mã:
    Loop Sun Ray
        Events
            Time - Every 0.04 seconds of game time
        Conditions
        Actions
            Set angle = (Facing of Caster)
            Set Point = (Position of Caster)
            Set Pointother = (Point offset by 150.00 towards (Facing of Caster) degrees)
            Unit - Set mana of Caster to ((Mana of Caster) - Mana)
            For each (Integer A) from 1 to Integer, do (Actions)
                Loop - Actions
                    Unit - Remove Dummy[(Integer A)] from the game
                    Set Point2 = (Pointother offset by ((Real((Integer A))) x 50.00) towards (Facing of Caster) degrees)
                    Unit - Create 1 Dummy for (Owner of Caster) at Point2 facing Default building facing degrees
                    Unit - Turn collision for Dummy[(Integer A)] Off
                    Set Dummy[(Integer A)] = (Last created unit)
                    Set Point_Dummy = (Position of Dummy[(Integer A)])
                    Set Group = (Units within 300.00 of Point_Dummy matching (((Matching unit) belongs to an enemy of (Owner of Caster)) Equal to True))
                    Unit Group - Pick every unit in Group and do (Actions)
                        Loop - Actions
                            Set Damage = ((((Real((Level of Sun Ray  for Caster))) x 10.00) + ((Max life of (Picked unit)) x 0.05)) / 25.00)
                            Unit - Cause Caster to damage (Picked unit), dealing Damage damage of attack type Hero and damage type Normal
            Custom script:   call RemoveLocation(udg_Point)
            Custom script:   call RemoveLocation(udg_Point2)
            Custom script:   call RemoveLocation(udg_Pointother)
            Custom script:   call DestroyGroup(udg_Group)
    
    Mã:
    End Loop
        Events
            Unit - A unit Is issued an order with no target
        Conditions
            (Issued order) Equal to Night Elf Demon Hunter - Deactivate Immolation
        Actions
            Trigger - Turn off Loop Sun Ray <gen>
            Custom script:   call RemoveLocation(udg_Point)
            Custom script:   call RemoveLocation(udg_Point2)
            Custom script:   call RemoveLocation(udg_Pointother)
            Custom script:   call DestroyGroup(udg_Group)
            Unit - Remove Increase Distance  from Caster
            Unit - Remove Decrease Distance  from Caster
            For each (Integer A) from 1 to Integer, do (Actions)
                Loop - Actions
                    Unit - Remove Dummy[(Integer A)] from the game
    
    Mã:
    Increase Distance
        Events
            Unit - A unit Is issued an order with no target
        Conditions
        Actions
            If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                If - Conditions
                    (Issued order) Equal to Neutral Naga Sea Witch - Activate Mana Shield
                Then - Actions
                    Set Integer = (Integer + 2)
                Else - Actions
            If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                If - Conditions
                    (Issued order) Equal to Neutral Naga Sea Witch - Deactivate Mana Shield
                Then - Actions
                    Set Integer = (Integer + 2)
                Else - Actions
    
    Mã:
    Decrease Distance
        Events
            Unit - A unit Starts the effect of an ability
        Conditions
            (Ability being cast) Equal to Decrease Distance 
        Actions
            Set Integer = (Integer - 2)
    
    [/spoil]​
     
    Chỉnh sửa cuối: 19/6/12
  19. WorldCyberGame

    WorldCyberGame Youtube Master Race

    Tham gia ngày:
    18/6/12
    Bài viết:
    48
    Nơi ở:
    tpHCM
    hóa ra em nhìn nhầm chứ vẫn ko đc. Nó lạ là ko phải nó ko hoạt động mà là tổng kill chỉnh = 2 (equal to) thì lại phải giết đủ 3 mạng mới thắng, chỉnh 3 thì phải giết 4, v...v. Là sao ta???
     
  20. langthangbairac

    langthangbairac T.E.T.Я.I.S

    Tham gia ngày:
    19/5/12
    Bài viết:
    594
    Nơi ở:
    Thanh Chương
    Muốn làm 1 multiboard, quest hiển thị riêng cho từng player thì làm sao nhỉ

    ---------- Post added at 13:58 ---------- Previous post was at 13:52 ----------

    thì sai chứ sao! Khi giết mạng thứ 3 thì làm gì nó đã tính mangj này
     
Trạng thái chủ đề:
Không mở trả lời sau này.

Chia sẻ trang này