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

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

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

    KuKulKan T.E.T.Я.I.S

    Tham gia ngày:
    2/8/09
    Bài viết:
    629
    Nơi ở:
    Quận Thủ Đức, Thành phố Hồ Chí Minh
    Đoạn code của Tom fix lại 1 tí, cho nó nhận vào 1 tham số unit caster, bỏ đi phần local unit caster

    Bên kia function Action của bạn thêm vào if (Stop(caster)) -- truyền biến caster (là thằng casting đã lưu lại khi cast spell) ờ function Action này qua cho function Stop kia xử lí tiếp..
     
    mvcthinh thích bài này.
  2. huanvinhhb

    huanvinhhb Youtube Master Race

    Tham gia ngày:
    5/9/11
    Bài viết:
    26
    Attacking ( là thằng đánh ) khi attack vào Attacker ( là thằng bị đánh ) mất 100hp thì Attacking ( là thằng đánh ) phản lại mất 50hp là 50% bị phản lại
    trong forum có ai làm đc kiểu buff ( GUI ) ý ko có thì send nên cho ae thực tập học hỏi kái
     
  3. LeoNguyen112

    LeoNguyen112 Dragon Quest

    Tham gia ngày:
    22/5/10
    Bài viết:
    1,438
    Nơi ở:
    TP.HCM
    1 map có khoảng hơn 50 trigger với event là every (0.01 - 1) second of game time thì có gây lag không?
     
  4. FlameDrake

    FlameDrake Dragon Quest

    Tham gia ngày:
    1/12/10
    Bài viết:
    1,298
    Nơi ở:
    Quận 10 HCM
    Nên 0,04 > 1 thì an toàn hơn, dưới 0,04 nghe bác Tom nói wa nhanh rất dễ gây lỗi :D
     
  5. LeoNguyen112

    LeoNguyen112 Dragon Quest

    Tham gia ngày:
    22/5/10
    Bài viết:
    1,438
    Nơi ở:
    TP.HCM
    Mình không hỏi thời gian lặp lại, mình hỏi về số lượng trigger cơ.
     
  6. Doom_Sage

    Doom_Sage Mr & Ms Pac-Man

    Tham gia ngày:
    24/7/11
    Bài viết:
    147
    Càng nhiều càng lag : Đơn giản
    Nhưng mà hạn chế every time < 0.02s . Không thì nhấc chuột đi không nổi đấy
     
  7. KuKulKan

    KuKulKan T.E.T.Я.I.S

    Tham gia ngày:
    2/8/09
    Bài viết:
    629
    Nơi ở:
    Quận Thủ Đức, Thành phố Hồ Chí Minh
    Kan đố mọi người nhé, 1 câu nho nhỏ thui nhưng sẽ giúp ích phần nào cho mọi người ^^

    Dùng 1 Timer, xử lí 1000 câu lệnh
    Dùng 10 Timer, mỗi Timer xử lí 100 câu lệnh

    Giả sử cùng 1 con CPU chạy, hỏi cách nào là tốt nhất...
     
  8. FlameDrake

    FlameDrake Dragon Quest

    Tham gia ngày:
    1/12/10
    Bài viết:
    1,298
    Nơi ở:
    Quận 10 HCM
    Quote lần 2, ai co dạng tường này cho mình xin gấp gấp :|
     
  9. fantom2409

    fantom2409 Mr & Ms Pac-Man

    Tham gia ngày:
    15/8/11
    Bài viết:
    194
    Cho em hỏi cái Trigger nay` bị Lỗi gì thế ??
    //===========================================================================
    // Trigger: Knockback Knife
    //===========================================================================
    function Trig_Knockback_Knife_Conditions takes nothing returns boolean
    if ( not ( GetSpellAbilityId() == 'A005' ) ) then
    return false
    endif
    return true
    endfunction

    function Trig_Knockback_Knife_Func002C takes nothing returns boolean
    if ( not ( GetLearnedSkillBJ() == 'A005' ) ) then
    return false
    endif
    return true
    endfunction

    function Trig_Knockback_Knife_Actions takes nothing returns nothing
    call KnockbackTarget(GetSpellAbilityUnit() , GetSpellTargetUnit() , GetUnitFacing(GetSpellAbilityUnit()) , 250.00 , 5.00 , true , true , true)
     
  10. mvcthinh

    mvcthinh Mr & Ms Pac-Man

    Tham gia ngày:
    18/8/11
    Bài viết:
    140
    Nơi ở:
    HCM
    cách 2! .. chia đều công việc.. mỗi timer làm việc nhẹ hơn 1 timer.. bộ nhớ phân từng vùng ra làm việc hiệu quả hơn trên 1 vùng
     
  11. mvcthinh

    mvcthinh Mr & Ms Pac-Man

    Tham gia ngày:
    18/8/11
    Bài viết:
    140
    Nơi ở:
    HCM
    Cho hỏi làm cách nào để Hit 1 phát là mất máu..

    VD như có spell chạy mỗi 0.01s.. nếu Missile dính Unit thì nó mất máu. Mà nếu cách thường thì chỉ cần tiếp xúc là mất 10 HP tương đương 1s sẽ mất 1000 HP.. bây giờ mình muốn làm nó chỉ mất máu 1 lần thay vì phải chạm tới 1s mới được 1000HP thì làm thế nào. Như vậy khi vừa đụng vào sẽ mất 1000 máu luôn.. và nếu đụng lần 2 mà lần đầu mất rồi thì lần 2 không mất.

    Làm giúp mình với JASS nha.
     
  12. babycat1819

    babycat1819 Youtube Master Race

    Tham gia ngày:
    28/1/10
    Bài viết:
    59
    Mọi người cho em hỏi muốn Remove 1 Location bằng custom crip mà Biến Array là Integer A + 2 thì Code là gì ?
     
  13. Ryanpzo9

    Ryanpzo9 Donkey Kong

    Tham gia ngày:
    20/10/08
    Bài viết:
    326
    Ko biết làm Jass nhưng mà có gợi ý là khi pick group xung quanh con unit đó thì sẽ check thêm nếu (Picked Unit) nằm trong 1 group gọi là HitGroup hay chưa. Nếu chưa gây dmg cho nó rồi add nó vào HitGroup.

    ---------- Post added at 19:52 ---------- Previous post was at 19:50 ----------

    Call RemoveLocation(udg_Tênbiến[GetForLoopIndexA()])
     
  14. SJuddy

    SJuddy Mr & Ms Pac-Man

    Tham gia ngày:
    13/8/11
    Bài viết:
    177
    Nơi ở:
    ☺Tennessee☺
    nếu bằng jass cậu sử dụng tích hợp system này vào (xe0.8) . điển hình ví dụ sử dụng xe0.8 ở đây:
    Mã:
    library AbilityTest initializer abiInitz requires xecollider, xecast
    private function AbilityCon takes nothing returns boolean
        if ( not ( GetSpellAbilityId() == 'which?' ) ) then   // thay which? = gia tri integer ability code
            return false
        endif
        return true
    endfunction
    
    private struct abiTest extends xecollider
        unit cHand
        unit tHand
        group gHand
        method onUnitHit takes unit target returns nothing
            if (IsUnitEnemy(target, GetOwningPlayer(this.cHand)) and IsUnitInGroup(target,gHand)==false then
                if (this.cHand != target) and (this.tHand != target) and GetWidgetLife(target)>0.405 and GetUnitAbilityLevel(target, 'Avul') == 0 then
                     call UnitDamageTarget(this.cHand,target,whichdam?(real),false,false,WHICH_ATTACK_TYPE,WHICH_DAMAGE_TYPE,null)
                     call GroupAddUnit(gHand,target)
                endif
            endif
        endmethod
           
        method onDestroy takes nothing returns nothing
            call this.terminate()
            call GroupClear(gHand)
            call DestroyGroup(gHand)
            set this.cHand = null 
            set this.tHand = null
        endmethod
           
    endstruct
    
    private function AbilityAct takes nothing returns nothing
        local unit cast=GetTriggerUnit()
        local unit t=GetSpellTargetUnit() //local giá trị này khi mục tieu là unit
        local location p=GetSpellTargetLoc() //local giá trị này một khi sử dụng mục tiêu là location ! Neu co t, local location p=GetUnitLoc
        local abiTest missile
        local location p2=GetUnitLoc(c)
        local real fac=AngleBetweenPoints(p2,p)
        set missile=abiTest.create(GetUnitX(cast),GetUnitY(cast),(fac / bj_RADTODEG))
        set missile.path="đường dẫn model for missile"
        set missile.expirationTime= 1.0// thoi gian ton tai
        set missile.scale=1.0// gia tri phong dai
        set missile.speed=900 // toc do bay bt cua mot missile
        set missile.cHand=cast
        set missile.gHand=CreateGroup()
        set cast=null
        set t=null
        call RemoveLocation(p)
        call RemoveLocation(p1)
    endfunction
    
    function abiInitz takes nothing returns nothing
        local trigger whichTrig = CreateTrigger(  )
        call TriggerRegisterAnyUnitEventBJ( whichTrig, EVENT_PLAYER_UNIT_SPELL_EFFECT )
        call TriggerAddCondition( whichTrig, Condition( function AbilityCon ) )
        call TriggerAddAction( whichTrig, function AbilityAct )
        set whichTrig=null
    endfunction
    endlibrary
    cậu tham khảo, viết bằng tay nên đôi khi có lỗi do kô kiểm tra nhé
     
  15. fantom2409

    fantom2409 Mr & Ms Pac-Man

    Tham gia ngày:
    15/8/11
    Bài viết:
    194
    Cho em hỏi cái Trigger nay` bị Lỗi gì thế ??
    //===========================================================================
    // Trigger: Knockback Knife
    //===========================================================================
    function Trig_Knockback_Knife_Conditions takes nothing returns boolean
    if ( not ( GetSpellAbilityId() == 'A005' ) ) then
    return false
    endif
    return true
    endfunction

    function Trig_Knockback_Knife_Func002C takes nothing returns boolean
    if ( not ( GetLearnedSkillBJ() == 'A005' ) ) then
    return false
    endif
    return true
    endfunction

    function Trig_Knockback_Knife_Actions takes nothing returns nothing
    call KnockbackTarget(GetSpellAbilityUnit() , GetSpellTargetUnit() , GetUnitFacing(GetSpellAbilityUnit()) , 250.00 , 5.00 , true , true , true)
     
  16. SJuddy

    SJuddy Mr & Ms Pac-Man

    Tham gia ngày:
    13/8/11
    Bài viết:
    177
    Nơi ở:
    ☺Tennessee☺
    ^ rất đơn giản: thiếu endfunction, thiếu function initializer ...
     
    mvcthinh thích bài này.
  17. mvcthinh

    mvcthinh Mr & Ms Pac-Man

    Tham gia ngày:
    18/8/11
    Bài viết:
    140
    Nơi ở:
    HCM

    Cách này thì mình biết rồi.. vì muốn làm MUI nên dùng cách này không được. Mình nghĩ qua JASS cũng lưu y chang nhưng chưa biết cách làm


    Mình chưa hiểu lắm vì sao phải dùng library??
    với lại có mấy thứ mình chưa biết dùng như method, library..v..v...

    không biết làm theo cách này có được không . khi test spell thì thấy nó takes damage ok. nhưng không biết theo cách dưới đây có hoạt động đúng trong trường hợp muốn MUI spell không .?

    [spoil]
    PHP:
    scope PoisonArrow initializer  Arrow

    globals
        
    private integer idSpell 'A02A'
        
    private integer idDummy 'h015'
    endglobals

        
    private struct data
        unit hero
        unit dummy
        
        real x
        real y
        
        real angle
        group H

        integer tick
        timer t
        endstruct
        
        
    private function Conditions takes nothing returns boolean
                            
    return GetSpellAbilityId() == idSpell
        endfunction

    private function removetree takes nothing returns nothing
        call KillDestructable
    GetEnumDestructable() )
    endfunction
        
    private function MoveArrow takes nothing returns nothing
        local timer t 
    GetExpiredTimer()
        
    local data d GetTimerData(t)
        
    local group g CreateGroup()

        
        
    local integer lv GetUnitAbilityLevel(d.hero,idSpell)
        
    local integer lvl GetUnitLevel(d.hero)
        
        
    local real x d.x
        local real y 
    d.y
        
        local real tx
        local real ty
        
        local unit temp
        local location p

                set p 
    GetUnitLoc(d.dummy)
                
    call EnumDestructablesInCircleBJ(58,p,function removetree )
                
    call RemoveLocation(p)
          
           
            if 
    d.tick 200 then
                
                set tx
    =x+20*d.tick*Cos(d.angle*bj_DEGTORAD)
                
    set ty=y+20*d.tick*Sin(d.angle*bj_DEGTORAD)
                
                
                
    call SetUnitPosition(d.dummy,tx,ty)
                
                
                
                
    call GroupEnumUnitsInRange(g,tx,ty,100,null)
        
                        
    loop
                            set temp 
    FirstOfGroup(g)
                           
                                
    exitwhen temp == null 
                                            
    if IsUnitEnemy(temp GetOwningPlayer(d.dummy)) and  IsUnitInGroup(tempd.H) != true   then
                                        
                                            call UnitDamageTargetBJ
    (d.dummy,temp,DAMAGE(lv,lvl), ATTACK_TYPE_NORMALDAMAGE_TYPE_NORMAL )
                                    
                                            
    call GroupRemoveUnit(g,temp)
                                  
                                            endif
                                
    call GroupAddUnit(d.H,temp)
                                
    call GroupRemoveUnit(g,temp)
                                   
                        
    endloop
                call DestroyGroup
    (g)
                
    set temp null

                
    else
                
                
    call RemoveUnit(d.dummy)
                
    call GroupRemoveGroup(d.H,d.H)
                
    call DestroyGroup(d.H)
                
    set d.hero null
                set d
    .dummy null
                set d
    .null
                call ReleaseTimer
    (d.t)
                
    call d.destroy()
                endif
            
        
    call DestroyGroup(g)

    set temp null

    set d
    .tick d.tick 1
    set t 
    null
    set p 
    null
    endfunction

    private function Actions takes nothing returns nothing
        local data d 
    data.create()
        
        
    local unit hero GetSpellAbilityUnit()

        
    local real x GetUnitX(hero)
        
    local real y GetUnitY(hero)
        
    local real tx GetSpellTargetX()
        
    local real ty GetSpellTargetY()
        
        
    local integer lv GetUnitAbilityLevel(hero,idSpell)
        
    local integer lvl GetUnitLevel(hero)
        
        
    local real angle bj_RADTODEG*Atan2(ty-y,tx-x)

     
    set d.hero hero
     

     set d
    .x
     set d
    .y
     
     set d
    .angle angle 
     
     set d
    .dummy =  CreateUnit(GetOwningPlayer(hero),idDummy,x,y,angle)
           
     
    set d.tick 1
     set d
    .NewTimer()
     
    set d.CreateGroup()   
        
    call SetTimerData(d.t,d)
        
    call TimerStart(d.t,0.01,true,function MoveArrow  )

     

     
    set hero null


    endfunction

    //===========================================================================
        
    private function Arrow takes nothing returns nothing
    local trigger t 
    CreateTrigger(  )
      
        
    call TriggerRegisterAnyUnitEventBJtEVENT_PLAYER_UNIT_SPELL_EFFECT )
        
    call TriggerAddConditiontCondition( function Conditions ) )
        
    call TriggerAddActiont, function Actions )
    endfunction

    endscope
    [/spoil]

    Trình viết JASS còn gà nên dòm thấy nhìu quá.. nhìn cái của bạn viết mà mình đờ ra luôn. :@)
     
  18. SJuddy

    SJuddy Mr & Ms Pac-Man

    Tham gia ngày:
    13/8/11
    Bài viết:
    177
    Nơi ở:
    ☺Tennessee☺
    đây. tại mình quen sử dụng library rồi nên viết vậy luôn. thực chất cậu có quyền sử dụng scope thay library cho tiện. còn private struct nghĩa là lấy một cấu trúc lấy bên xecollider (tạm hiểu vậy đi, song thì tìm hiểu sâu vào). method thì cậu cứ làm theo vậy đi. cụ thể khi am hiểu system là gì thì mình giải thích tại sao nó như vậy
    @ cái struct của cậu leak - thiếu method onDestroy takes nothing returns nothing
     
  19. mvcthinh

    mvcthinh Mr & Ms Pac-Man

    Tham gia ngày:
    18/8/11
    Bài viết:
    140
    Nơi ở:
    HCM
    Struct của mình bị leak là do thiếu cái method gì gì trên.. vậy nghĩa là khi có khai báo bất kỳ biến gì ở Struct cũng phải dùng method OnDestroy để xóa nó đi hả..
    nhưng mà làm sao để gọi cái method trong struct đó xóa leak đi.. hay nó tự động xóa leak.. vì như cái bạn ghi mình không thấy gọi onDestroy ở đâu cả. (cũng có thể không thấy, bạn in đậm giúp mình..)

    PS: hix.. vậy là leak struct của mình hơi bị nhiều.. chỉ cách mình xóa leak cái này với.. mình chưa hiểu bạn nói lắm.. nói rõ tý nữa :D
     
    Chỉnh sửa cuối: 5/10/11
  20. FlameDrake

    FlameDrake Dragon Quest

    Tham gia ngày:
    1/12/10
    Bài viết:
    1,298
    Nơi ở:
    Quận 10 HCM
    Bà con cho hỏi đối với Amination mà dạng chuẩn như spell slam, spell, ... thì khi dùng trigger hay cho vào spell thì vẫn bt nhưng với dạng có con số theo sau như attack - 1, attack - 2, ... thì khi cho trong spell thì cho thế lào ?
     
Trạng thái chủ đề:
Không mở trả lời sau này.

Chia sẻ trang này