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. YAN[asian]

    YAN[asian] Mario & Luigi

    Tham gia ngày:
    27/3/07
    Bài viết:
    812
    Nhờ Tom hướng dẫn mình lại vụ unit slide đến mép bản đồ thì dừng lại nhé.
     
    Chỉnh sửa cuối: 26/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
    1/ hồi bản 1.23 thì có giờ thì ko ....
    Trong lúc mình chờ mình đã tìm ra cái này :D, mặc dù chắc là ko dùng gì nhưng có lẽ post lên người khác biết vẫn tốt :P
    2/Nếu 1 unit A summon ra nhiều unit B thì nên
    - học thêm 1 chút vjass và dùng các system dùng để đánh index cho unit
    - tạo array group grpB và set/get bằng cách grpB[GetUnitIndex(unitA)] add/remove unitB
    Ko thì cách của cậu cũng được hashtable cũng ko sao. Còn để test độ lag thì cho dùng spell liên tục và bật Frame per Second = /fps để kiểm tra độ lag của map

    Trong cái mình đang làm thì 1 A chỉ có 1 B, nhưng bạn có thể giúp mình 1 số link tham khảo về cái bạn nói đánh index cho unit ko? vjass mình ko dùng nhưng đọc cũng hiểu đc chút chút. Trường hợp xấu nhất thì save nó ra mở = MPQ editor để xem = jass cũng dc
    3/Dùng lệnh RemoveUnit là đảm bảo unit đã bị xóa sổ. Còn kiểm tra bằng cách DisplayText: GetUnitName(removeUnit) trước và sau khi remove.
    Nếu unit đó tồn tại trong map thì sẽ ra unit name = tên cụ thể nếu ko tồn tại trong map thì sẽ ra (null)
    Tác dụng là gắn vào 1 unit 1 giá trị integer và Get là lấy ra giá trị đã gắn. Nếu ko dùng hàm set thì mặc định khi get là 0.
    Đây chính là hàm mấu chốt cho các system để "đánh số báo danh" cho 1 unit

    Vậy là chỉ có tên của unit bị remove thay đổi hay sao ý :D. Cám ơn bạn nhiều. Mà có 1 điều là lúc đầu mình GetUnitUserData thì ra 0, nhưng remove xong Get lại thì nó là 48, nó đổi là vì unit đó đã ko tồn tại nữa phải ko, ý mình là nếu dùng những hàm khác ảnh hưởng unit thì cái UserData mình set đâu có bị gì phải ko :D?


    Quay về cái ability abcxyz lúc nãy, ví dụ mình có 1 unitA tạo 3 unitB, mình tạo 3 mảng arrUnitB1, arrUnitB2, arrUnitB3 và lưu index dữ liệu vào UserDat của unitA, rồi khi nào cần mình arrUnitB1/2/3[GetUnitUserData(GetTriggerUnit())] đế lấy unit B thứ 1/2/3 của A đc phải ko?

    Với lại ngoài các dữ liệu có thể lưu cho unit như UserData, UnitRallyUnit thì còn có gì tương tự vậy để lưu vô cho unit ko vậy?


    p/s:mình vừa thử lại: ngay cả sau khi remove mình GetUnitName cũng vẫn ra đc tên unit T_T
    p/s 2: SetUnitRallyUnit đâu có hoạt đ6ọng với mấy con Unit ko xài Rally đâu nhỉ :D, vừa thử
     
    Chỉnh sửa cuối: 27/6/12
  3. 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
    1, cái đó theo bây giờ vẫn còn tại và còn một cái "kế nhiệm" tốt hơn nó là Hashtable

    p/s:mình vừa thử lại,

    theo mình "đoán" đầu tiên bạn cục bộ đơn vị đó bằng hàm local. tiếp theo kiểm tên bằng handle(u) đó
    sau đó remove unit với handle là (u).
    mặc dù unit đã xóa sổ nhưng trong cục bộ function vẫn còn data của unit đó. có thể là tên thậm chí còn có thể lưu trữ lại Z Y X cuối cùng trước khi xóa sổ (bằng cách set u = null) vì điều này sẽ khiến (u) vẫn hiển thị tên :-". nếu
    globals
    private unit u
    endglobals

    set u=CreateUnit(Player(0),'hspt',000,0,0) thay vì local unit u=CreateUnit(Player(0),'hspt',000,0,0) thì điều đó có thể không xảy ra:-"
     
  4. Ice Dragon

    Ice Dragon Mega Man

    Tham gia ngày:
    6/9/04
    Bài viết:
    3,101
    Nơi ở:
    none
    Mình vừa thử thay nó = 1 biến unit global, và cũng ko khác gì :D
     
  5. choima

    choima Youtube Master Race

    Tham gia ngày:
    28/11/10
    Bài viết:
    85
    Quote lại lần nữa ai giúp mình không, làm ơn đi mà :3cool_adore:
     
  6. nobutino

    nobutino Youtube Master Race

    Tham gia ngày:
    21/6/12
    Bài viết:
    36
    cái biến chả hiểu bạn nói gì cả
     
  7. WorldCyberGames

    WorldCyberGames Youtube Master Race

    Tham gia ngày:
    27/6/12
    Bài viết:
    99
    Hướng dẫn cách làm biến tạo Unit ở các Unit xung quanh một vùng: dùng trigger Unit - Creat 1 ...............

    ---------- Post added at 09:28 ---------- Previous post was at 09:19 ----------

    Một spell cơ bản về sử dụng chiêu gây sát thương bằng các chỉ số Agi, Str: dùng trigger Unit - Damage Target
     
  8. Tom_Kazansky

    Tom_Kazansky

    Tham gia ngày:
    28/12/06
    Bài viết:
    3,454
    Nơi ở:
    Hà Nội
    - làm thế nào để cái đó có thể "tạo Unit ở các Unit xung quanh một vùng" ?

    - dùng trigger đó gây damage rồi sao? "bằng chỉ số Agi, Str" thì thế nào?
     
  9. WorldCyberGames

    WorldCyberGames Youtube Master Race

    Tham gia ngày:
    27/6/12
    Bài viết:
    99
    ^
    toàn ăn hiếp em:
    Mã:
    bua lun 1
        Events
            Unit - A unit Starts the effect of an ability
        Conditions
            (Ability being cast) Equal to bua lun 1 
        Actions
            Unit - Cause (Casting unit) to damage (Target unit of ability being cast), dealing ((Real((Level of bua lun 1  for (Casting unit)))) + ((Real((Strength of (Casting unit) (Exclude bonuses)))) x 2.00)) damage of attack type Spells and damage type Normal
    :(

    ---------- Post added at 09:56 ---------- Previous post was at 09:37 ----------

    cho em hỏi cách làm -repick giống dota :D
    p.s: hôm qua em có hỏi unit slide là gì thôi mà cũng cho em ăn point :9cool_too_sad:

    ---------- Post added at 10:12 ---------- Previous post was at 09:56 ----------

    cho em hỏi về mấy cái tọa độ trong 12 ô chứa icon :|
     
  10. vuongkkk

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

    Tham gia ngày:
    22/5/10
    Bài viết:
    588
    Nơi ở:
    Hà Nội
    @Ice Dragon:

    Mình vừa thử thay nó = 1 biến unit global, và cũng ko khác gì
    p/s:mình vừa thử lại: ngay cả sau khi remove mình GetUnitName cũng vẫn ra đc tên unit T_T

    Thực chất trong cùng 1 trigger thì dù hàm của cậu có remove unit đó, trừ khi set null giá trị unit ko thì sẽ lun lun lấy ra được GetUnitUserData và GetHandId thì kể cả trigger khác mà ko làm null nó thì vẫn lấy được.
    Đây là trigger thử nghiệm của mình
    Mã:
    globals
        unit Untitled_Trigger_001_u
    endglobals
    
    function Trig_Untitled_Trigger_001_Actions takes nothing returns nothing
    call BJDebugMsg("Truoc remove " + R2S(GetUnitUserData(Untitled_Trigger_001_u)) + " - " + I2S(GetHandleId(Untitled_Trigger_001_u)))
    call RemoveUnit(Untitled_Trigger_001_u)
    
    if Untitled_Trigger_001_u!=null then
    call BJDebugMsg("Sau remove " + R2S(GetUnitUserData(Untitled_Trigger_001_u)) + " - " + GetUnitName(Untitled_Trigger_001_u) + I2S(GetHandleId(Untitled_Trigger_001_u)))
    endif
    endfunction
    
    function InitTrig_Untitled_Trigger_001 takes nothing returns nothing
        set gg_trg_Untitled_Trigger_001 = CreateTrigger(  )
        call TriggerRegisterPlayerEventEndCinematic( gg_trg_Untitled_Trigger_001, Player(0) )
        call TriggerAddAction( gg_trg_Untitled_Trigger_001, function Trig_Untitled_Trigger_001_Actions )
        set Untitled_Trigger_001_u=CreateUnit(Player(0),'hspt',000,0,0)
    endfunction
    Mà có 1 điều là lúc đầu mình GetUnitUserData thì ra 0, nhưng remove xong Get lại thì nó là 48!
    Mình cá là cậu có code làm ảnh hưởng đến giá trị chứ code thử của mình ko như thế

    Với lại ngoài các dữ liệu có thể lưu cho unit như UserData, UnitRallyUnit thì còn có gì tương tự vậy để lưu vô cho unit ko vậy?
    Ko. Nhưng chỉ cần UserData là đã đủ rồi

    Quay về cái ability abcxyz lúc nãy, ví dụ mình có 1 unitA tạo 3 unitB, mình tạo 3 mảng arrUnitB1, arrUnitB2, arrUnitB3 và lưu index dữ liệu vào UserDat của unitA, rồi khi nào cần mình arrUnitB1/2/3[GetUnitUserData(GetTriggerUnit())] đế lấy unit B thứ 1/2/3 của A đc phải ko?
    Sao ko dùng group thì chỉ cần 1 cái array và bao nhiêu unit cũng được :-?

    Học vjass:
    Vô cùng đơn giản nếu cậu đã dùng được jass. Chỉ 1 ngày là dùng được vjass. Xem ở <Jass new gen folder>/jasshelper/jasshelpermanual.html

    1 số link tham khảo về cái bạn nói đánh index cho unit
    Unit Indexer

    Slide là gì ???
    Hình minh họa
    Hướng dẫn

    cho em hỏi về mấy cái tọa độ trong 12 ô chứa icon
     
    Chỉnh sửa cuối: 27/6/12
  11. WorldCyberGames

    WorldCyberGames Youtube Master Race

    Tham gia ngày:
    27/6/12
    Bài viết:
    99
    ko đc rồi mấy anh ơi
    em disable speelbook xong, nó mất cả spellbook thì lấy gì:
    1) làm icon cho đẹp
    2) làm sao nâng skill lên tiếp lv2
    bây giờ chỉ ok 75%, em muốn là:
    1 skill passive (có icon hẳn hoi và ko nhấn vào đc)
    bây giờ làm sao để ko cho nhấn vào spellbook nhưng vẫn hiện icon của nó :-/

    ---------- Post added at 11:29 ---------- Previous post was at 11:10 ----------

    nói toán lại em muốn chuyển dạng 1 skill active (nhấn đc) thành 1 skill passive (ko nhấn đc)
     
  12. YAN[asian]

    YAN[asian] Mario & Luigi

    Tham gia ngày:
    27/3/07
    Bài viết:
    812
    Xóa bài mà ko giúp hả Tom? :(
     
  13. WorldCyberGames

    WorldCyberGames Youtube Master Race

    Tham gia ngày:
    27/6/12
    Bài viết:
    99
    Anh Tom............. l...ự...u......đ...ạ...n :-??:">
    cho em hỏi cách chuyển 1 skill từ active sang passive vì spellbook nhấn đc, xấu lắm
    p.s: em chỉ nói vậy cho vui chứ ko phải chửi anh nhé :|
     
  14. Tom_Kazansky

    Tom_Kazansky

    Tham gia ngày:
    28/12/06
    Bài viết:
    3,454
    Nơi ở:
    Hà Nội
    tiếp theo hướng dẫn về slide của tôi:

    Mã:
    SlideMove  // ko cần OFF sẵn, cứ ON luôn
        Events
            Time - Every 0.04 seconds of game time
        Conditions
        Actions
            For each (Integer A) from 1 to SlideIndex, do (Actions)
                Loop - Actions
                    If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        If - Conditions
                            SlideTick[(Integer A)] Equal to 0
                        Then - Actions
                            For each (Integer B) from (Integer A) to (SlideIndex - 1), do (Actions)
                                Loop - Actions
                                    Set SlideAngle[(Integer B)] = SlideAngle[((Integer B) + 1)]
                                    Set SlideDistance[(Integer B)] = SlideDistance[((Integer B) + 1)]
                                    Set SlideTick[(Integer B)] = SlideTick[((Integer B) + 1)]
                                    Set SlideUnit[(Integer B)] = SlideUnit[((Integer B) + 1)]
                            Set SlideIndex = (SlideIndex - 1)
                        Else - Actions
                    -------- ---------------- --------
                    If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        If - Conditions
                            SlideTick[(Integer A)] Greater than 0
                        Then - Actions
                            Set SlideTick[(Integer A)] = (SlideTick[(Integer A)] - 1)
                            Set TempLoc = (Position of SlideUnit[(Integer A)])
                            Set TempLoc2 = (TempLoc offset by SlideDistance[(Integer A)] towards SlideAngle[(Integer A)] degrees)
                            [COLOR="#0000FF"]If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                If - Conditions
                                    ((Playable map area) contains TempLoc2) Equal to True
                                Then - Actions
                                    Unit - Move SlideUnit[(Integer A)] instantly to TempLoc2
                                    Special Effect - Create a special effect at TempLoc2 using Abilities\Spells\Human\FlakCannons\FlakTarget.mdl
                                    Destructible - Pick every destructible within 200.00 of TempLoc2 and do (Actions)
                                    Loop - Actions
                                        Destructible - Kill (Picked destructible)
                                Else - Actions
                                    Set SlideTick[(Integer A)] = 0[/COLOR]
                            Custom script:   call RemoveLocation( udg_TempLoc )
                            Custom script:   call RemoveLocation( udg_TempLoc2 )
                        Else - Actions
    
    phần xanh là phần thay đổi.

    trước khi di chuyển unit thì kiểm tra xem point này (TempLoc2) có ở trong Playable map area hay không
    - có: di chuyển, tạo effect, phá cây
    - không: dừng slide bằng cách đặt số tick = 0

    tôi nghĩ không cần thiết phải demo.

    tôi không thấy vui thì làm thế nào giờ? :-/

    chuyển active sang passive: không có cách nào

    giải quyết vấn đề trên:
    tạo ability Apassive, có hiện iconkhông có tác dụng gì (Storm Hammer, Vorpal Blade,...)

    trigger:
    Mã:
    Learn
        Events
            Unit - A unit Learns a skill
        Conditions
            (Learned Hero Skill) Equal to [B]ability A[/B]
        Actions
            Set TempUnit = (Triggering unit)
            Set TempInt = (Learned skill level)
            If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                If - Conditions
                    TempInt Equal to 1
                Then - Actions
                    Unit - Add [B]Spell Book[/B] to TempUnit
                Else - Actions
                    [COLOR="#0000FF"]Unit - Set level of [B]ability trong spellbook[/B] for TempUnit to TempInt[/COLOR]
    
    khi học ability A, nếu là level 1 thì add spellbook (đã disable) cho Trigger unit, nếu lên level (từ 2 trở lên) thì đặt level cho ability trong spellbook lên đúng level vừa học
    có bao nhiêu ability trong spellbook thì phải có bấy nhiêu dòng màu xanh
     
  15. langthangbairac

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

    Tham gia ngày:
    19/5/12
    Bài viết:
    594
    Nơi ở:
    Thanh Chương
    Toàn từ mới.... !

    Anh tom... còn có nguyên nhân nào khác không
     
  16. WorldCyberGames

    WorldCyberGames Youtube Master Race

    Tham gia ngày:
    27/6/12
    Bài viết:
    99
    blah blah blah là... bá láp đó. Trigger blah nghĩa là trigger đọc vào mà ko hiểu nó ghi gì
     
  17. langthangbairac

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

    Tham gia ngày:
    19/5/12
    Bài viết:
    594
    Nơi ở:
    Thanh Chương
    map vltk của mình đưa cho thằng nào edit lại chắc nó cũng hoa cả mắt :) cái trigger Tống kim dài đến nỗi Con trượt bên cạnh dài còn khoảng chưa đầy 1cm =)) đấy là cố cắt ra trigger khác bớt rồi đấy. Vì cái này lớn nhất map nên mình xem kỹ cả rồi.... chắc phải có nguyên nhân nào đó chứ ?
     
  18. Ice Dragon

    Ice Dragon Mega Man

    Tham gia ngày:
    6/9/04
    Bài viết:
    3,101
    Nơi ở:
    none
    Thực chất trong cùng 1 trigger thì dù hàm của cậu có remove unit đó, trừ khi set null giá trị unit ko thì sẽ lun lun lấy ra được GetUnitUserData và GetHandId thì kể cả trigger khác mà ko làm null nó thì vẫn lấy được.
    Đây là trigger thử nghiệm của mình

    Điều này nghĩa là khi lưu 1 Unit vào 1 biến rồi sau đó RemoveUnit nếu như ko đi kèm null biến đó thì ko có cách nào phân biệt unit chứ trong biến đó đã Remove hay chưa?
    Nghĩa là
    Sao ko dùng group thì chỉ cần 1 cái array và bao nhiêu unit cũng được
    Vì quên :">. Tại đó h ít dùng group :D.
    Mà tính ra mình vẫn dùng đc 1 arr cho 3 units nhở, ví dụ như cái trên

    Thì mình dùng UnitB[GetUnitUserData(GetTriggerUnit())*3+0/1/2] để lấy unit B thứ 1/2/3 của A nhỉ :-?

    Bạn thật may mắn hơn 1 số người đang sửa chữa map trên cái file war3map.j >"<
     
    Chỉnh sửa cuối: 27/6/12
  19. vuongkkk

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

    Tham gia ngày:
    22/5/10
    Bài viết:
    588
    Nơi ở:
    Hà Nội
    ừa, giả lập mảng 2 chiều @@
    nhưng mà tớ giờ cũng ko chắc dùng group hay unit array nhanh hơn nữa ...
     
  20. Ice Dragon

    Ice Dragon Mega Man

    Tham gia ngày:
    6/9/04
    Bài viết:
    3,101
    Nơi ở:
    none
    Theo tớ nghĩ thì group thì vẫn phải chứa dữ liệu về các unit phần tử, nên ít nhất nó vẫn phải là 1 array unit đc thêm vào 1 số tính năng :-?
    Mà cái chính là tớ ghét làm việc với Group vì cứ phải dùng ForGroup gọi qua 1 hàm khác, lại phải truyền dữ liệu qua biến tạm T_T
    Hay có cách nào lấy ra từng unit trong group giống như loop qua array nhỉ ?
     
Trạng thái chủ đề:
Không mở trả lời sau này.

Chia sẻ trang này