Topic hỏi đáp (tập 5) về cách làm map

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

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

    game_war48 Dragon Quest

    Tham gia ngày:
    7/9/08
    Bài viết:
    1,320
    Nơi ở:
    Ice City
    Để thế kia làm sao nó biết đc function nào Init ?
    Thêm cái scope vào:
    Mã:
    scope CreateUnit initializer IntCreateUnit
    function Create_Actions takes nothing returns nothing
        call CreateUnitAtLoc(Player(0),'hpea',Location(320,25),270)        
    endfunction
    
    function IntCreateUnit takes nothing returns nothing
        local trigger Create = CreateTrigger()
        call TriggerRegisterTimerEventSingle( Create, 5 )
        call TriggerAddAction(Create, function Create_Actions)
    endfunction
    endscope
    Nếu kô muốn dùng scope thì phải để tên function Init "đúng". Muốn biết tên "đúng" thì Disabled rồi Enabled cái trigger đấy, Jassnewgen sẽ báo.
     
  2. Keny Hoàng

    Keny Hoàng Youtube Master Race

    Tham gia ngày:
    29/7/10
    Bài viết:
    3
    các bạn cho mình hỏi mình tạo 1 nhà hero rồi thêm vào map nhưng nó không cho mua nhân vật, kể cả thêm 1 unit ở cạnh nhà tướng.Đây là ảnh
    [​IMG]
     
  3. King War

    King War

    Tham gia ngày:
    23/7/10
    Bài viết:
    2,136
    Nơi ở:
    kw_corp@yh
    cái này int ?
    bộ cái này k có tác dụng hã :|
     
    kingwar2010 and powerharder like this.
  4. game_war48

    game_war48 Dragon Quest

    Tham gia ngày:
    7/9/08
    Bài viết:
    1,320
    Nơi ở:
    Ice City
    Cái function init ở đây là function IntCreateUnit. Mà muốn cái function này chạy lúc "Map Initializing" thì phải cho vào scope hoặc đặt tên "đúng" của nó. Như lúc ban đầu function này chưa đc xem là function Init, thì
    Mã:
    call TriggerAddAction(Create, function Create_Actions) 
    chả có tác dụng gì cả :-@.
     
  5. LeoNguyen112

    LeoNguyen112 Dragon Quest

    Tham gia ngày:
    22/5/10
    Bài viết:
    1,438
    Nơi ở:
    TP.HCM
    Gameplay Constants -> Chance to miss (moving or highing ground) -> đổi 0,25 thành bất cứ số nào bạn muốn
     
  6. game_war48

    game_war48 Dragon Quest

    Tham gia ngày:
    7/9/08
    Bài viết:
    1,320
    Nơi ở:
    Ice City
    Dùng Metamorphosis 'AEme' của Demon Hunter. Với Data - Alternate Form Unit là unit range, Data - Normal Form là unit melee. Chỉnh Data - Morphing FlagsUninterruptablePermanent, Stats - Duration - Hero là 0 (có thể chỉnh luôn Stats - Duration - Normal là 0 để chuyển ngay lập tức).
     
  7. King War

    King War

    Tham gia ngày:
    23/7/10
    Bài viết:
    2,136
    Nơi ở:
    kw_corp@yh
    [​IMG]
    [​IMG]

    còn đây là những lỗi nào :P

    và tại sao mà copy vào test map liền ko dc (dis k test dc) , save mới vào dc :|

    Mã:
    scope CreateUnit initializer IntCreateUnit
    function Create_Actions takes nothing returns nothing
        call CreateUnitAtLoc(Player(0),'hpea',Location(320,25),270)        
    endfunction
    
    function IntCreateUnit takes nothing returns nothing
        local trigger Create = CreateTrigger()
        call TriggerRegisterTimerEventSingle( Create, 5 )
        call TriggerAddAction(Create, function Create_Actions)
    endfunction
    endscope
    và có thể làm 1 jass riêng về "int" ko?
    Mã:
    scope CreateUnit initializer IntCreateUnit
    và hõi thêm chĩnh số unit ra ở đâu
     
    Chỉnh sửa cuối: 30/7/10
  8. ZhengHe

    ZhengHe T.E.T.Я.I.S

    Tham gia ngày:
    4/1/09
    Bài viết:
    623
    @LeoNguyen: cái đó chả ảnh hưởng gì đến việc miss ở đây cả, ý bạn ấy là tỉ lệ đánh miss như các game RPG nhưng war ko có, chỉ có skill evasion (ko biết ghi đúng ko). Cái của bạn chỉ là miss khi chênh lệch độ cao.

    Cho hỏi cái này skill này sửa thế nào? Tập làm Jass, mô tả skill muốn làm: trong 4s tạo dummy xài chainlightning vào target 3 lần, dummy move theo target (attach vào target)

    Mã:
    function Cond takes nothing returns boolean
    return GetSpellAbilityId() == 'A004'
    endfunction
    
    struct TW
       unit caster
       unit target
       unit dummy
       location loc
       integer int
       string sfx
    endstruct
    
    function Dummy_Attach_Target takes nothing returns nothing
       local timer t2 = GetExpiredTimer()
          call SetUnitPositionLoc( data.dummy, data.target)
       if IsUnitAliveBJ(data.dummy) == false then
          call ReleaseTimer(t2)
       endif
    endfunction
    
    function Dummy_Wraith_Count takes nothing returns nothing
       local timer t1 = GetExpiredTimer()
       call UnitAddAbility( 'A006', data.dummy)
       call IssueTargetOrder( data.dummy, "chainlightning", data.target)
       call AddSpecialEffectTargetUnit( "chest", data.target, data.sfx)
       call DestroyEffect( GetLastCreatedEffect() )
       call UnitDamageTarget( data.caster, data.target, ((35*I2R(GetUnitAbilityLevel(data.caster, 'A004')))+ 15),true,false,ATTACK_TYPE_MAGIC,DAMAGE_TYPE_NORMAL,WEAPON_TYPE_WHOKNOWS) 
       set data.int = (data.int - 1)
       if data.int <= 0 then
          call data.destroy()
          call ReleaseTimer(t1)
       endif
       set t1 = null
    endfunction   
    
    function Thunder_Wraith_Setup takes unit caster, unit target, unit dummy, integer int, string sfx, location loc returns nothing
       local TS data = TS.create()
       local timer t1 = NewTimer()
       local timer t2
       set data.caster = GetSpellAbility()
       set data.target = GetSpellTargetUnit()
       set loc = GetUnitLoc (data.target)
       set data.sfx = "Abilities\Spells\Orc\LightningShield\LightningShieldBuff.mdl"
       set data.int = 3
       set data.dummy = CreateNUnitsAtLoc ( 1, 'e001', GetOwningPlayer(data.caster), GetUnitLoc(data.target), 0.00)
       call TimerStart( t1, (I2R(4/3) ), true, function Thunder_Wraith_Count)
       call TimerStart( t2, 0.03 ), true, function Dummy_Attach_Target)
       set t1 = null
       set t2 = null
    endfunction
    
    //===========================================================================
    function InitTrig_Thunder_Wraith takes nothing returns nothing
        set gg_trg_t = CreateTrigger(  )
        call TriggerRegisterAnyUnitEvent( gg_trg_t, EVENT_PLAYER_UNIT_SPELL_EFFECT)
        call TriggerAddCondition( gg_trg_t, Condition (function Cond))
        call TriggerAddAction( gg_trg_t, function Thunder_Wraith_Actions )
    endfunction
    
    P/s 1: ai hướng dẫn xài scope int cho trigger với mình thử thì nó báo lỗi :(
    P/s 2: Tại sao xài struct nó lại báo "data is not of a type that allows . syntax
    P/s 3: bị lỗi giống 'king war 1' đống "statement out side of function"
     
    Chỉnh sửa cuối: 30/7/10
  9. Computer(Lord)

    Computer(Lord) T.E.T.Я.I.S

    Tham gia ngày:
    2/11/08
    Bài viết:
    615
    Nơi ở:
    Defend Sea
    @zhenghe+kingwar: Mấy cái lỗi đó cứ bỏ qua đi, nếu trong game vẫn hoạt động bt thì ko sao đâu.
     
  10. King War

    King War

    Tham gia ngày:
    23/7/10
    Bài viết:
    2,136
    Nơi ở:
    kw_corp@yh
    thêm số lượng unit ra ở đâu

    Mã:
    scope GameInfo
    function Trig_Actions takes nothing returns nothing
        call DisplayTimedTextToForce( GetPlayersAll(), 30, "GameInfo")
    endfunction
    
    function InitTrig takes nothing returns nothing
        local trigger Trig = CreateTrigger()
        call TriggerRegisterTimerEventSingle(Trig,3)
        call TriggerAddAction(Trig, function Trig_Actions)
    endfunction
    endscope
    sao zo game k hiện text thế
     
    Chỉnh sửa cuối: 31/7/10
  11. game_war48

    game_war48 Dragon Quest

    Tham gia ngày:
    7/9/08
    Bài viết:
    1,320
    Nơi ở:
    Ice City
    @KingWar, Zhenghe: Dùng Jasshelper để check lỗi thôi (update bản mới nhất hiện này là 0.A.2.B), mấy cái Syntax Check của Jassnewgen và cái Jasscraft kia là sai hết đấy.
    Muốn chỉnh số lượng tạo unit thì dùng 2 cách:
    -1 là dùng loop (khuyên dùng):
    Mã:
    function Create_Actions takes nothing returns nothing
        local integer i = 1
        
        loop
            exitwhen i > 50
            
            call CreateUnitAtLoc(Player(0),'hpea',Location(320,25),270)   
            
            set i = i + 1
        endloop
    endfunction
    50 là tổng số units muốn tạo.

    -cách 2 là dùng lệnh CreateNUnitsAtLoc:
    Mã:
    function Create_Actions takes nothing returns nothing
        call CreateNUnitsAtLoc( 50, 'hpea', Player(0), Location(320,25), 270 )
    endfunction
    --------------------------

    Cái code trên thiếu phần "initializer InitTrig" ở scope, để ý cái code mà tớ đưa, phần scope có "initializer IntCreateUnit":
    Mã:
    scope CreateUnit initializer IntCreateUnit
    
    Bây giờ thêm "initializer InitTrig" vào scope:
    Mã:
    scope GameInfo initializer InitTrig
    function Trig_Actions takes nothing returns nothing
        call DisplayTimedTextToForce( GetPlayersAll(), 30, "GameInfo")
    endfunction
    
    function InitTrig takes nothing returns nothing
        local trigger Trig = CreateTrigger()
        call TriggerRegisterTimerEventSingle(Trig,3)
        call TriggerAddAction(Trig, function Trig_Actions)
    endfunction
    endscope
     
    King War thích bài này.
  12. King War

    King War

    Tham gia ngày:
    23/7/10
    Bài viết:
    2,136
    Nơi ở:
    kw_corp@yh
    gamewar có thể chỉ cách gộp 2 trigger (jass) thành 1 ko:D cho tiện :)
     
  13. game_war48

    game_war48 Dragon Quest

    Tham gia ngày:
    7/9/08
    Bài viết:
    1,320
    Nơi ở:
    Ice City
    Thì cứ copy vào thôi, ví dụ gộp 2 cái trên lại với nhau thì:
    Mã:
    scope CreateUnit initializer IntCreateUnit
    function Create_Actions takes nothing returns nothing
        local integer i = 1
        
        loop
            exitwhen i > 50
            
            call CreateUnitAtLoc(Player(0),'hpea',Location(320,25),270)   
            
            set i = i + 1
        endloop
    endfunction
    
    function IntCreateUnit takes nothing returns nothing
        local trigger Create = CreateTrigger()
        call TriggerRegisterTimerEventSingle( Create, 5 )
        call TriggerAddAction(Create, function Create_Actions)
    endfunction
    endscope
    
    scope GameInfo initializer InitTrig
    function Trig_Actions takes nothing returns nothing
        call DisplayTimedTextToForce( GetPlayersAll(), 30, "GameInfo")
    endfunction
    
    function InitTrig takes nothing returns nothing
        local trigger Trig = CreateTrigger()
        call TriggerRegisterTimerEventSingle(Trig,3)
        call TriggerAddAction(Trig, function Trig_Actions)
    endfunction
    endscope
    (Nhớ là phải có ngăn cách, cụ thể ở đây là cái scope kia).
     
  14. Leoni

    Leoni Mr & Ms Pac-Man

    Tham gia ngày:
    13/9/08
    Bài viết:
    127
    Nơi ở:
    The hell
    Giúp em với :((
    .................................
     
  15. King War

    King War

    Tham gia ngày:
    23/7/10
    Bài viết:
    2,136
    Nơi ở:
    kw_corp@yh
    kiểu này mà đặt cái VAR (ghi trong jass) liên kết 2 jass này thì sao?
     
  16. game_war48

    game_war48 Dragon Quest

    Tham gia ngày:
    7/9/08
    Bài viết:
    1,320
    Nơi ở:
    Ice City
    Liên kết ? Cụ thể là liên kết ntn ?

    @Zhenghe:
    Mã:
    scope ThunderWraith initializer InitTW // Cho vào scope để dùng đc private
    
    private struct tw // Khi cho vào scope rồi thì có thể dùng private, để WE kô bị "nhầm" với các struct khác 
       unit caster
       unit target
       unit dummy
       
       integer int
       integer tick
       
       string sfx
    endstruct
    
    private function ThunderWraith takes nothing returns nothing // Private ở đây có tác dụng tượng tự trên
        local timer ti = GetExpiredTimer() 
        local tw d = GetTimerData( ti ) // Lấy struct qua timer
           
        local location loc = GetUnitLoc( d.target ) // Lấy vị trí của target
        
        call SetUnitPositionLoc( d.dummy, loc ) // Di chuyển vị trí của dummy tới vị trí của target.
    
        set d.tick = d.tick - 1 // Giảm tick
        if d.tick <= 0 then // Hết tick, hết 1s, giật sét 1 lần
                
            call IssueTargetOrder( d.dummy, "chainlightning", d.target)
        
            call DestroyEffect( AddSpecialEffectTarget( "chest", d.target, d.sfx ) )
            call UnitDamageTarget( d.caster, d.target, ((35*I2R(GetUnitAbilityLevel(d.caster, 'A004')))+ 15),true,false,ATTACK_TYPE_MAGIC,DAMAGE_TYPE_NORMAL,WEAPON_TYPE_WHOKNOWS) 
            
            set d.tick = 25 // Set d.tick = 25 để có thể chạy lại từ đầu
            set d.int = d.int - 1 // Sét đánh 1 lần, giảm 1 lần.
            if d.int <= 0 then // Hết lần đánh sét, end spell.
                call KillUnit( d.dummy ) // "Giết" dummy
                
                call ReleaseTimer( ti )
                call d.destroy()
            endif
            
        endif
        
        call RemoveLocation( loc )
        set loc = null
        set ti = null
    endfunction   
    
    private function Act takes nothing returns nothing
        local tw d = tw.create() // Tạo struct
        
        local timer ti = NewTimer() // Tạo timer
        
        local location loc // Khai báo biến loc
       
        set d.caster = GetTriggerUnit() // Đặt giá trị cho d.caster là thằng cast spell.
        set d.target = GetSpellTargetUnit() // Đặt giá trị cho d.target là thằng bị cast.
       
        set loc = GetUnitLoc( d.target ) // Lấy vị trí của thằng target
       
        set d.sfx = "Abilities\\Spells\\Orc\\LightningShield\\LightningShieldBuff.mdl"
       
        set d.int = 3 // Số lần bị sét đánh
        set d.tick = 25 // Tick này khi chạy hết sẽ giảm 1 d.int và chạy lại từ đầu, hết d.int hết thì end spell.
       
        set d.dummy = CreateUnitAtLoc( GetOwningPlayer( d.caster ), 'e001', loc, 0. )
        call UnitAddAbility( d.dummy, 'A006' )
       
        call SetTimerData( ti, d ) // Lưu struct vào timer
        call TimerStart( ti, 0.04 , true, function ThunderWraith ) // Chạy timer, mỗi 0.04s sẽ chạy 1 lần function ThunderWraith. Nếu để 0.04s giảm 1 d.tick thì hết 1s thì hết d.tick.
       
        call RemoveLocation( loc ) // Remove leak, GUI đã quá quen thuộc rồi
        set loc = null // "Null" loc, remove leak
        set ti = null
    endfunction
    
    private function Cond takes nothing returns boolean
        return GetSpellAbilityId() == 'A004'
    endfunction
    
    //===========================================================================
    private function InitTW takes nothing returns nothing
        local trigger TrigTW = CreateTrigger(  )
        call TriggerRegisterAnyUnitEventBJ( TrigTW, EVENT_PLAYER_UNIT_SPELL_EFFECT)
        call TriggerAddCondition( TrigTW, Condition ( function Cond ))
        call TriggerAddAction( TrigTW, function Act )
    endfunction
    
    endscope
    View attachment [Spell] Thunder Wraith.rar
     
    Chỉnh sửa cuối: 31/7/10
  17. King War

    King War

    Tham gia ngày:
    23/7/10
    Bài viết:
    2,136
    Nơi ở:
    kw_corp@yh
    ví dụ như 2 trigger = GUI thì dùng var
    còn jass hình như là local hay globals (ko bít rõ, đang học :P)
     
  18. ZhengHe

    ZhengHe T.E.T.Я.I.S

    Tham gia ngày:
    4/1/09
    Bài viết:
    623
    còn câu này ai trả lời giùm :(
    @Leoni bạn lên Hiveworkshop có system slide thì phải.
     
  19. lucifekit

    lucifekit The Warrior of Light

    Tham gia ngày:
    25/2/06
    Bài viết:
    2,344
    globals var ở GUI kiểu udg_ hả?

    globals
    [kiểu biến]--[tên biến]=[giá trị (có hoặc không ) ]
    vd int sounittaora = 5
    endglobals
     
  20. King War

    King War

    Tham gia ngày:
    23/7/10
    Bài viết:
    2,136
    Nơi ở:
    kw_corp@yh
    làm giúp kiểu demo này dc hem :|
     
Trạng thái chủ đề:
Không mở trả lời sau này.

Chia sẻ trang này