[ai cần bài hướng dẫn vô đây] "request" tutorials

Thảo luận trong 'World Editor' bắt đầu bởi Tom_Kazansky, 25/12/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
    Trước việc các bài hướng dẫn sẽ "bị" hỏi đi hỏi lại , Tom tạo ra topic này, newbie nào có yêu cầu gì về bài hướng dẫn nào, post yêu cầu vào đây.

    Nhớ rằng phải post rõ ràng, có đầu, đuôi. Nếu đc như vậy sẽ có bài trả lời
    -------
    Nghiêm cấm "xì pam" trong topic này, spam = xóa bài.
    -------
    Các bài trả lời sẽ đc post tại đây và đc tổng hợp ở post đầu tiên này.
    ================
    --- Tổng hợp ---
    Sử dụng Handle Vars của KaTTana
    Cách select hero như DDay và một vài thứ khác
    Cách ghép đồ, có thể ghép nhiều item cùng loại và "nhập" các item sử dụng theo "charge".
    Hồi sinh hero như DDay

    Code màu của player trong War
    Kiểm tra vị trí của một unit so với unit khác
    Check units positions demo
    Simple Items Combining
    Regrowth Trees
    Cách protect map
    Bảng tính điểm (Leaderboard)
    Slide, Chain Spell
    Make custom auto-cast spell
    Memory Leak and Custom Script
    Spawn units over time
    Hero XP - Creeps
    Hero XP - Required Experience to level up
    Một chút hướng dẫn về làm spell kiểu "càng gần càng mạnh"
    -----------------
    EDIT: ai có link bài hướng dẫn về vấn đề gì thì hãy pm Tom để Tom cho vào đây.
     
  2. galaem

    galaem Youtube Master Race

    Tham gia ngày:
    3/1/08
    Bài viết:
    40
    Anh ơi! e mới tập làm map thui nhưg khó quá anh ah anh có thể viết 1 bài chi tiêt được ko.Tất cả các bước đề làm map í.
    Em muốn làm một map dang như DDay vêy nếu được giúp em nha thanks anh nhìu.
     
  3. rongdoVN

    rongdoVN Space Marine Doomguy Lão Làng GVN

    Tham gia ngày:
    6/9/05
    Bài viết:
    5,667
    Nơi ở:
    TS-Pri GameVN
    hjx em yêu cầu vậy hơi bị khó đó cái này dành cho newbie thôi
    mà newbie mới vào sao làm đc ??
    nếu muốn hướng dẫn chi tiết hả? OK để anh gom mấy cái cũ nhất mà hay cho em
    mà trước tiên em hãy nói cho anh biết em có biết biến là gì ko?
     
  4. Dark_DragonKing

    Dark_DragonKing Mr & Ms Pac-Man

    Tham gia ngày:
    23/7/08
    Bài viết:
    217
    Tui đang cần bài tut về handler về cua KaTTaNa nè Help!!!
    Và nhân tiện giải thích lun tại sao nên xài handler vẻ
    Và 1 số cách anti BJ nữa
    Hình như mấy chữ BJ màu đỏ la leaky
     
  5. lucifekit

    lucifekit The Warrior of Light

    Tham gia ngày:
    25/2/06
    Bài viết:
    2,344
    Em cần 1 tut về khóa map sao cho người khác ko deprotect được...
     
  6. F10-E-Q

    F10-E-Q Youtube Master Race

    Tham gia ngày:
    31/8/07
    Bài viết:
    54
    1 cách không cần protect, xong rùi change hết wa text...open ra đoc dc cũng pro =)) rui` save as ra ban~ khac'...(chứ đừng save rùi ngồi khóc lun :d )

    1 lời khuyên dành cho newbie, dù có kể chi tiết tỉ mỉ thì bạn có đọc củng chẳng hiểu vì nó rất đa dạng, phong phú với từng thể loại....bạn muốn làm map thì cứ làm đi...làm bí chỗ nào thì hỏi....người ta dễ trả lời và mình dễ tiếp thu hơn...

    Ví dụ : làm map giống dday...bí ở phần chọn hero = các con cừu => hỏi ::)
    bí ở phần tạo các đợt lính hay summoning => hỏi ::)
     
  7. Diệp Thanh

    Diệp Thanh Kirin Tor Moderator Lão Làng GVN

    Tham gia ngày:
    7/2/04
    Bài viết:
    4,293

    Cái KATTANA Var handle đó cũ rồi mà bây giờ còn ai dùng nữa :-/
    kiếm mấy món mới của thằng Cohadar về mà nghịch bạn à, ko dùng CSData cũng hay.

    Mấy cái BJ ko hẳn là leak, nó ko hiệu quả = các hàm native thôi..nhưng nghe nói dùng chắc năng antiBJ của Jass NewGen cũng được...
     
  8. rongdoVN

    rongdoVN Space Marine Doomguy Lão Làng GVN

    Tham gia ngày:
    6/9/05
    Bài viết:
    5,667
    Nơi ở:
    TS-Pri GameVN
    ôi trời ơi
    topic này dành cho newbie cơ mà mấy pro vào đây làm gì ::(
    em trả lời ko đc đâu đó
     
  9. Tom_Kazansky

    Tom_Kazansky

    Tham gia ngày:
    28/12/06
    Bài viết:
    3,454
    Nơi ở:
    Hà Nội
    Chà, cái đó thì nhiều vấn đề lắm. Anh chỉ làm một vài bài hướng dẫn NHỎ thôi.

    Thật ra vấn đề ko phải là có bị deprotect hay ko, mà là dùng tool làm cho map nhẹ đi, load nhanh hơn,.. và protect một thể. Chứ protect kiểu gì thể nào chả có người deprotect đc. (có virus thì ắt có anti-virus mà :wink: )

    ====================================================================

    Handler của KaTTana:
    - Đầu tiên phải có script: Local Handle Vars, lấy ở đây: http://www.wc3jass.com/viewtopic.php?t=224 hoặc vô trong map demo (Tom gửi kèm ở dưới mà lấy), script này trong map demo thì Tom đã "sửa" một chút rồi.
    - Có thể dùng WE bình thường, nhg nên dùng NewGen (mà Dragon đang dùng NewGen đúng ko ? ) vì có library đỡ phải cho vào map header
    - Cách sử dụng:
    Ta sẽ tạo func (function = hàm) Knockback (rất cơ bản :D )
    Đầu tiên, tạo 1 trigger, tên tùy ý, KnockBack chẳng hạn, convert ra jass rồi xóa hết các thứ ở trong rồi viết cái mới:

    Mã:
    function Knockback takes unit a, real dist, real angle returns nothing
                          //a là unit bị knock, dist là khoảng các, angle là góc knock
        local timer t = CreateTimer() // tạo timer
        local integer tick = 25
        
        //store data into "t"
        call SHHandle( t, "Knockback_Unit" , a )
        call SHReal( t, "Knockback_Distance" , dist / tick )
        call SHReal( t, "Knockback_Angle" , angle )
        call SHInt( t, "Knockback_Tick" , tick )
        
        call TimerStart( t, 0.04, true, function KnockbackE )
        
        set t = null
    endfunction
    Trong func trên, ta cần các biến là a, dist và angle (như comment)
    tạo 1 biến local, timer, tên là t
    biến integer tick là biến đếm.

    SHHandle là func của Local Handle Vars, dùng để "lưu" một handle vào handle. (handle là unit, timer, item, destructable,... xem list trong Jass Craft sẽ rõ handle là gì) trong này lưu unit a vào timer t dưới cái "tên" là "Knockback_Unit"
    SHReal cũng là func của Local Handle Vars, dùng để lưu một real vào handle. Trong này là lưu "khoảng cách" di chuyển (dist / tick) dưới tên "Knockback_Distance". Chú ý: ta lưu khoảng cách MỖI LẦN MOVE unit a, nên nó sẽ bằng <Tổng khoảng cách> / <biến đếm>, ở đây biến đếm là 25.
    Tương tự ta lưu góc knock angle dưới tên "Knockback_Angle" và biến đếm tick dưới tên "Knockback_Tick"

    Sau đó ta chạy timer t với 0.04 duration, có lặp lại và "callback func" là function KnockbackE. "callback func" là func khi timer "hết" sẽ gọi.
    Cuối cùng là null timer, null handle nói chung, để tránh leak local :|

    Dưới đây ta có func KnockbackE (đặt ở trên func Knockback)
    Mã:
    function KnockbackE takes nothing returns nothing
        local timer t = GetExpiredTimer()
        //Get data from "t"
        local unit a = GHUnit( t, "Knockback_Unit" ) //use GHUnit to get stored unit
        local real dist = GHReal( t,  "Knockback_Distance" )
        local real angle = GHReal( t,  "Knockback_Angle" )
        local integer tick = GHInt( t, "Knockback_Tick" )
        
        local location loc
        local location loc2
        
        if tick == 0 then
            //null data, use:
            call FHL( t )
            //or: 
            //call SHHandle( t, "Knockback_Unit" , null )
            //call SHReal( t, "Knockback_Distance" , 0. )
            //call SHReal( t, "Knockback_Angle" , 0. )
            //call SHInt( t, "Knockback_Tick" , 0 )
            
            call DestroyTimer(t)
            set t = null
            return
        endif
        
        call SHInt( t, "Knockback_Tick" , tick - 1 ) //decrease tick
        
        set loc = GetUnitLoc(a)
        set loc2 = PolarProjectionBJ( loc , dist, angle )
        
        call AddSpecialEffectLocBJ( loc2, "Abilities\\Spells\\Human\\FlakCannons\\FlakTarget.mdl" )
        call DestroyEffect( GetLastCreatedEffectBJ() )
        
        call SetUnitPositionLoc( a, loc2 )
        
        call RemoveLocation(loc)
        set loc = null
        call RemoveLocation(loc2)
        set loc2 = null
        set t = null
    endfunction
    Ở func KnockbackE, GetExpiredTimer() là timer t (ở func Knockback) mà ta đã chạy với func callback là func KnockbackE
    Ta "lấy" các thứ đã "lưu" với timer t: unit a, real dist, real angle, integer tick dưới các tên "Knockback_Unit", "Knockback_Distance", "Knockback_Angle", "Knockback_Tick". Khi muốn lấy unit ta dùng func GHUnit, real thì dùng GHReal, integer thì dùng GHInt (các func ở trong Local Handle Vars)

    ta có một if kiểm tra biến đếm. Nếu biến đếm == 0, vậy ta sẽ "null" dữ liệu, sử dụng func FHL( t ) với t là timer hoặc có thể "lưu" với giá trị "null" (với handle thì là null, real là 0. , integer là 0 )

    sau đó dùng DestroyTimer để xóa timer này, tránh leak, và cuối cùng null t (là biến local, loại handle) => hết if

    Sau khi kiểm tra, thấy biến đếm chưa về 0, ta sẽ lưu biến đếm với giá trị đã giảm 1, call SHInt( t, "Knockback_Tick" , tick - 1 )
    Tiếp theo là đặt loc, loc2, tạo effect, move unit rồi remove location để "tẩy" leak thôi. Nhớ là t, loc, loc2 là biến local nên cũng phải "null".

    -----
    Vậy, kết luận ta có:
    khi gọi func Knockback, 1 timer sẽ đc tạo ra, các "data", dữ liệu, như unit bị knock, khoảng cách và góc knock, biến đếm, sẽ đc lưu vào timer (sử dụng: SHHandle, SHReal, SHInt,...)
    khi timer "expired" (timer bị 'hết") thì tại callback func, ta lấy các dữ liệu ra bằng cách dùng: GHUnit, GHReal, GHInt,... với GetExpiredTimer() (trong biến t)
    Sau đó kiểm tra biến đếm (tick), nếu nó bằng 0 thì ta sẽ xóa dữ liệu (dùng FHL hoặc "lưu lần nữa" các giá trị "null") và xóa timer. Nếu chưa bằng 0, ta tiến hành tạo effect, move unit bình thường.
    ----
    Chú ý: trong map demo, Tom đã "sửa" cái script Local Handle Vars này một chút,, SetHandle = SH, GetHandle = GH, FlushHandleLocal = FHL (viết tắt) và đặt vào library ::)
    ========================================================
    BJ = Blizzard.j là các func do Blizzard Entertainment viết, dựa trên các "native" (coi như là các func cũng đc, nhg nó là "gốc")
    Các BJ này phần lớn chỉ làm mỗi việc là "gọi" một native khác -> việc gọi gián tiếp này sẽ phần nào làm "chậm" code.
    Ví dụ:
    Mã:
    function SetUnitAbilityLevelSwapped takes integer abilcode, unit whichUnit, integer level returns integer
        return SetUnitAbilityLevel(whichUnit, abilcode, level)
    endfunction
    BJ trên ngoài việc gọi native SetUnitAbilityLevel, việc này là ko cần thiết, nên ta cứ gọi luôn SetUnitAbilityLevel => đó là anti-BJ
    Nhưng có một số BJ thì đúng là "đc việc", ví dụ:
    Mã:
    function RAbsBJ takes real a returns real
        if (a >= 0) then
            return a
        else
            return -a
        endif
    endfunction
    đó là hàm lấy "giá trị tuyệt đối", đây ko thể thay = 1 native nào đc, nên cứ dùng thôi.
    ------
    Oài, trả lời hơi muộn, a Rex lại nói mất rồi :D, mà thôi kệ :))
    Và CSData của Vexorian hay system của Cohadar thì cần dùng struct, nếu Dragon chưa biết struct thì Tom sẽ chỉ ::)
     

    Các file đính kèm:

  10. WordEditor

    WordEditor C O N T R A

    Tham gia ngày:
    8/9/08
    Bài viết:
    1,509
    Nơi ở:
    Leaf Village
    Chưa biết làm map thì vào topic ''World Editor - 1 số bài viết đáng chú ý của box'' mà xem, nhìu lắm đấy, đủ để làm 1 cái map DDay rồi :D _ Ngày xưa đâu biết web này, tự mà open map khác lên mò (_ _")
     
  11. galaem

    galaem Youtube Master Race

    Tham gia ngày:
    3/1/08
    Bài viết:
    40
    Mấy anh pro ú ù có thể chỉ em làm thế nào để mình tạo 1 chô~để chọn hero --> tạo con cừu hay cái con j` sáng sáng để chọn hero í.(giống Dday lúc mình vô chơi có 1 con để chọn í.
    Tiếp theo là làm thế nào để map có 2->8n` vô chơi dc e tạo xong vô test là nó cho thắng luôn::(
    Và cuối cùng là làm thế nào tạo1 cái nhà có items ở trong(máu,sách, vu~khí...),1 cái nhà
    tăng máu lúc mình chạy về thành, nhà lính tự chạy ra, con tướng lúc mình fang nó là win.
    Giúp e nha mí a. Thaks nhìu.::)
     
  12. Diệp Thanh

    Diệp Thanh Kirin Tor Moderator Lão Làng GVN

    Tham gia ngày:
    7/2/04
    Bài viết:
    4,293

    -Cách chọn tướng:
    cách này bất lợi ở chỗ mỗi tướng phải có 1 region, 1 trigger riêng..Bạn tạo 1 khu vực đủ rộng cho số Hero mình có, nên đặt cách biệt vùng chơi (đặt doodad cản lại, xây trên tường hay đặt boundary), sao đó, xếp hero lên, chuyển owner cho tất cả về neutral passive, đặt trước mặt mỗi hero 1 cái circle of power (unit ở phần neutral passive, campaign)..vẽ 1 region ngay trên đó rồi làm trigger sau (chẳng hạn chọn tướng blood mage):

    -event: unit - a unit enters <Blood Mage region>
    -condition: triggering unit equal to <Cừu>
    -Action: unit - kill triggering unit
    unit - create 1 Blood Mage for owner of triggering unit at owner of triggering unit start location
    camera - pan camera for owner of triggering unit to owner of triggering unit start location


    Cách trên tạo hero và chuyển camera về vị trí start location của player, do đó bạn nên đặt start location(unit) ở vị trí mình muốn..hoặc cũng có thể tạo và xoay camera về 1 region nào đó tùy bạn..

    -Nhà có item thì đơn giản nó như cái Goblin Merchant thôi, bạn tìm ở phần Object, Unit, Neutral Pasive(building). Bạn cũng có thể đổi tên, thay model tùy thích. Còn muốn thay đổi item bán trong shop thì tìm đến dòng: Techtree - items sold

    -Map ban đầu mới vô có 1 trigger melee initialization, bạn xóa nó đi là ổn..Số người chơi bạn vào: Scenario / Player properties (trên thanh menu đó).

    -Nhà tăng máu nó nằm ở phần: bạn mở cái Unit palette/Neutral Pasive là thấy. Tên nó là Fountain of Health.

    -Cách ra quân thì bạn xem map demo sẽ hiểu phần nào.

    EDIT: Hỏi thật hay clone vô phá vậy ? :-/
     

    Các file đính kèm:

    • blah.zip
      Kích thước:
      13.1 KB
      Đọc:
      463
  13. rongdoVN

    rongdoVN Space Marine Doomguy Lão Làng GVN

    Tham gia ngày:
    6/9/05
    Bài viết:
    5,667
    Nơi ở:
    TS-Pri GameVN
    anh rex quên remove entering unit rồi :D
    nếu ko remove nó chạy qua mấy cái circle khác nữa đó :;)
     
  14. Ice_water

    Ice_water Dragon Quest

    Tham gia ngày:
    11/1/07
    Bài viết:
    1,457
    Nếu xài lệnh change owner thì dễ dàng hơn nhìu :D
    Có -Action: unit - kill triggering unit ròi mà :|
     
  15. rongdoVN

    rongdoVN Space Marine Doomguy Lão Làng GVN

    Tham gia ngày:
    6/9/05
    Bài viết:
    5,667
    Nơi ở:
    TS-Pri GameVN
    hehehe mình quên đọc chưa kỹ :P
    phần ra creep thì chỉ luôn cho lẹ nè :D
    nếu bạn muốn creep ra theo mỗi thời gian thì làm trigger như vậy nè
    event: Time-Every 10seconds of game time
    condition : khỏi
    actions : unit creat x unit(creep bạn muốn cho ra) at region(nơi nào bạn muốn cho nó ra) facing default building facing degrees
    nếu muốn cho nhiều loại ra thì viết thêm cái action giống ở trên nhưng creep thì cho creep khác
     
  16. YAN[asian]

    YAN[asian] Mario & Luigi

    Tham gia ngày:
    27/3/07
    Bài viết:
    812
    Ặc! Rex đổi Avatar làm ko nhận ra. :'>

    Cần 1 bài hướng dẫn tỉ mỉ, dễ hiểu về ghép đồ, bao gồm ghép nhiều đồ khác nhau thành 1 đồ mới, nhiều đồ giống nhau (đồ dùng 1 lần như máu, mana) tự "xếp" vào 1 slot bằng Trigger.
     
  17. rongdoVN

    rongdoVN Space Marine Doomguy Lão Làng GVN

    Tham gia ngày:
    6/9/05
    Bài viết:
    5,667
    Nơi ở:
    TS-Pri GameVN
    về ghép nhiều item khác nhau thành 1 item khác.mình sẽ chỉ cái dễ nhất
    Mã:
    CombineItems
        Events
            Unit - A unit Acquires an item
        Conditions
        Actions
            If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                If - Conditions
                    ((Hero manipulating item) has an item of type Orb of Frost) Equal to True
                    ((Hero manipulating item) has an item of type Orb of Fire) Equal to True
                    ((Hero manipulating item) has an item of type Orb of Lightning) Equal to True
                Then - Actions
                    Item - Remove (Item carried by (Hero manipulating item) of type Orb of Frost)
                    Item - Remove (Item carried by (Hero manipulating item) of type Orb of Fire)
                    Item - Remove (Item carried by (Hero manipulating item) of type Orb of Lightning)
                    Hero - Create Claws of Attack +15 and give it to (Hero manipulating item)
                    Special Effect - Create a special effect at (Position of (Hero manipulating item)) using Abilities\Spells\Items\AIam\AIamTarget.mdl
                    Special Effect - Destroy (Last created special effect)
                Else - Actions
    
    còn về item máu khi có 1bình trên người nhặt thêm 1 bình máu nữa sẽ gộp lại thành 2 thì làm trigger nhứ thế này
    Mã:
    StackChargedItem
        Events
            Unit - A unit Acquires an item
        Conditions
            (Charges remaining in (Item being manipulated)) Greater than 0
        Actions
            Set TempUnit = (Hero manipulating item)
            Set TempItem = (Item being manipulated)
            For each (Integer A) from 1 to 6, do (Actions)
                Loop - Actions
                    Set TempItem2 = (Item carried by TempUnit in slot (Integer A))
                    If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        If - Conditions
                            (Item-type of TempItem2) Equal to (Item-type of TempItem)
                            TempItem2 Not equal to TempItem
                        Then - Actions
                            Item - Set charges remaining in TempItem2 to ((Charges remaining in TempItem2) + (Charges remaining in TempItem))
                            Hero - Drop TempItem from TempUnit
                            Item - Remove TempItem
                            Skip remaining actions
                        Else - Actions
    
    trigger trên còn áp dụng cho các item có "charge" khác.

    nếu bạn ko hiểu nữa thì vào demo map có attach ở dưới down về mở ra mà xem :wink:
    //==================
    Dưới đây là hệ thống ghép item do Tom_Kazansky làm rất dễ dùng

    cách dùng:

    cách đăng kí:

    chú ý: nếu thành phần nào không dùng thì phải đặt giá trị "NoItemType"
     

    Các file đính kèm:

  18. YAN[asian]

    YAN[asian] Mario & Luigi

    Tham gia ngày:
    27/3/07
    Bài viết:
    812
    Thanks! :D
    ________________________
     
  19. sukado

    sukado Youtube Master Race

    Tham gia ngày:
    29/9/06
    Bài viết:
    14
    ai chỉ em phần làm hồi sinh như của dday khi tướng bị die ý và chỉnh khoảng thời gian tướng hồi sinh lại , các pác chỉ từng tí một nha em gà mà
     
  20. rongdoVN

    rongdoVN Space Marine Doomguy Lão Làng GVN

    Tham gia ngày:
    6/9/05
    Bài viết:
    5,667
    Nơi ở:
    TS-Pri GameVN
    đây HS theo kiểu dday lv của hero chết x 10 giây tham khảo từ từ nha bạn :wink:
     
Trạng thái chủ đề:
Không mở trả lời sau này.

Chia sẻ trang này