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

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

  1. conmacabong

    conmacabong Mario & Luigi

    Tham gia ngày:
    30/5/11
    Bài viết:
    833
    Nơi ở:
    Hồ Chí Minh
    thx bồ tèo:6cool_smile:, mà sao tui làm thì cái hình nó bị sai kích cỡ, nó thành hình chữ nhật, còn bị mấy cái đường đen đen chạy ra nữa:8cool_tire:
    Nhưng thôi kệ, cái đó tính sau, còn có cái này nữa nè, mọi người giúp giùm : lúc trc có chơi campaign của Undead thì thấy có con hero tên Lich King nhưng không có thanh level, EXP gì cả
    Vậy thì làm sao để : 1 unit thành 1 hero, mà không cần phải làm cách chuyển model 1 con hero thành model con unit đó, vì em làm sẵn con unit rồi nhưng muốn nó hiện cái icon lên cho giống hero thôi, với lại em không muốn có thanh EXP gì hết:2cool_sexy_girl:
     
  2. Evil_Hunter

    Evil_Hunter Mario & Luigi

    Tham gia ngày:
    18/9/11
    Bài viết:
    786
    Nơi ở:
    Evil Forest
    Làm thử thế này: Chỉnh unit đó ở dòng Stats - Unit Classifcation là Worker
    Tuy nhiên khi unit đó đứng yên thì nó mới hiện :))
    Nếu ko phải thì cho cái ảnh để mình xem thử


    TOM: sử dụng JassNewGenPack, khi tạo mới Object sẽ được phép gõ raw id, cho chữ đầu tiên viết hoa (n000 -> N000) là unit mới tạo sẽ thành hero
     
    Last edited by a moderator: 25/10/12
  3. Ngoc LeO

    Ngoc LeO Mario & Luigi

    Tham gia ngày:
    23/7/06
    Bài viết:
    839
    Nơi ở:
    Nothing...
    Ai chỉ giúp mình lock độ cao của camera lại,chứ chỉnh độ cao của camera sau đó vuốt chuột giữa hay ấn insert hay delete thì camera lại trở về chế độ mặc định

    P/s: Mình viết một hàm khác để thu gọn lại,mỗi lần gọi đỡ tốn công viết như dưới

    Mã:
    function Whoknows takes nothing returns weapontype
          return WEAPON_TYPE_WHOKNOWS
       endfunction
    liệu có bị sao không ? Ví dụ thao tác chậm hơn,lag,blah blah
     
    Chỉnh sửa cuối: 26/10/12
  4. Evil_Hunter

    Evil_Hunter Mario & Luigi

    Tham gia ngày:
    18/9/11
    Bài viết:
    786
    Nơi ở:
    Evil Forest
    ^ Chắc là mỗi 0. mấy giây thì set camera tới độ cao nhất định thôi anh à :|
     
  5. Tom_Kazansky

    Tom_Kazansky

    Tham gia ngày:
    28/12/06
    Bài viết:
    3,454
    Nơi ở:
    Hà Nội
    dùng WEAPON_TYPE_WHOKNOWS luôn, sao phải gọi qua function? native ko dùng thích dùng BJ à =))
     
  6. Ngoc LeO

    Ngoc LeO Mario & Luigi

    Tham gia ngày:
    23/7/06
    Bài viết:
    839
    Nơi ở:
    Nothing...
    Hix,thế thì chết dở,tại em lười gõ nên rút gọn lại như vậy =-=. Giờ lại phải sửa,thật là tai hại...
     
    datmax, dor1993, ducmanh and 66 others like this.
  7. YAN[asian]

    YAN[asian] Mario & Luigi

    Tham gia ngày:
    27/3/07
    Bài viết:
    812
    Trong GUI mình chưa tìm đc cách nào bắt đc chính xác sự kiện unit nhận dam vật lý cả, ko biết trong JASS có cách nào ko? Vd muốn làm skill chém nước của Kunkka hay skill dậm tăng dam của ES trong Dota ấy, làm sao để khi đánh 1 cái thì mất buff...
     
  8. nhociuc

    nhociuc Mr & Ms Pac-Man

    Tham gia ngày:
    25/10/12
    Bài viết:
    145
    ^ Mình cũng k hiểu cái này có ai giúp ko !
     
  9. Ryanpzo9

    Ryanpzo9 Donkey Kong

    Tham gia ngày:
    20/10/08
    Bài viết:
    326
    Không hiểu sao từ lúc mình làm cái trigger khi sử dụng 1 item thì drop item đó và add item mới cho hero thì khi test map load đc 1/4 cái thanh loading là bị "The Frozen Throne has stopped working" :| Del toàn bộ trigger đó đi vẫn cứ bị như vậy :|
     
  10. LeoNguyen112

    LeoNguyen112 Dragon Quest

    Tham gia ngày:
    22/5/10
    Bài viết:
    1,438
    Nơi ở:
    TP.HCM
    Xem demo này !
     
  11. 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
    à cũng có thể thay thành ConvertWeaponType(0) ví dụ

    Mã:
    function Whoknows takes nothing returns weapontype
          return ConvertWeaponType(0)
       endfunction
     
  12. Stork[gm]

    Stork[gm] Donkey Kong

    Tham gia ngày:
    29/5/09
    Bài viết:
    438
    Nơi ở:
    서울한국
    Nếu tạo như vậy = GUI Trigger thì độ giật sẽ rất rất cao, nên cách của bạn chỉ nên dùng vs JASS. Và mình cũng chỉnh xong rồi, dùng take damage -> damage taken là xong rồi set life là ok :)

    - - - Updated - - -

    Nên nhớ Es và kk khi chém/đánh trúng mới mất buff, nên bạn dùng take damage rồi check buff hoặc check skill của Caster :)
     
  13. YAN[asian]

    YAN[asian] Mario & Luigi

    Tham gia ngày:
    27/3/07
    Bài viết:
    812
    Vấn đề ở chỗ : nếu chỉ đơn giản là take damage thì dùng phép cũng mất buff :).
     
  14. 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
    xài system damage này thì mọi vấn đề cũng hết :-? nhưng phải nhớ rằng các damage mình gây ra phải thuộc trong system damage này!
    Ex: call Damage_Spell (u,t,100)

    khi damage do hero đánh ra sys damage này luôn chỉ rằng đó là damage physical và mình có thể detector nó ra nhưng mấy skill gây damage như war stomp hay chain lightning phải chuyển damage bằng Ex: call Damage_Spell (u,t,100) thì sys damage mới nhận là damage phép :-?


    http://www.thehelper.net/threads/damage.117041/
     
  15. Ngoc LeO

    Ngoc LeO Mario & Luigi

    Tham gia ngày:
    23/7/06
    Bài viết:
    839
    Nơi ở:
    Nothing...
    System này hoạt động như nào cậu nói chi tiết hơn được không ?
     
  16. 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
    tại mình bỏ WE lâu quá nên hok còn nhớ cách thức hoạt động nó nữa! và đây là 1 skill xài nó(system damage) cậu xem thử!

    Mã:
    scope DefilingTouch initializer Init
    
        globals
            public constant integer BUFF_ID = 'A047' //spell dummy
            public constant integer BUFF_DE = 'A046' //spell dummy
            public constant integer BUFF_SW = 'A04C' //slow
            public constant integer LEARN = 'A045'
            public constant string DeathEx = "Abilities\\Spells\\Undead\\RaiseSkeletonWarrior\\RaiseSkeleton.mdx"
            public constant string ExpEx = "Objects\\Spawnmodels\\Orc\\OrcSmallDeathExplode\\OrcSmallDeathExplode.mdx"
        endglobals
        
        private function f takes nothing returns boolean
            local unit c = GetEventDamageSource() //caster
            local unit t = GetTriggerUnit() //target
            local unit cor
            if IsUnitEnemy(c, GetOwningPlayer(t)) == true/*
            */ and Damage_IsPhysical()/*
            */ and not ( IsUnitType(t, UNIT_TYPE_STRUCTURE)) == true /*
            */ and Damage_IsAttack()/*
            
            
            */ and GetUnitAbilityLevel(c, BUFF_ID) > 0 then
                set TempInt = GetUnitAbilityLevel(c, LEARN)
                call UnitRemoveAbility(c, BUFF_ID)
                call UnitAddAbility(c, BUFF_DE)
                call SetUnitAbilityLevel(c, BUFF_DE, TempInt)
                call CreateDummy(c, BUFF_SW, TempInt, "slow", t)
                set cor = CreateCorpse(Player(PLAYER_NEUTRAL_AGGRESSIVE), Minion_P1Melee, GetUnitX(t), GetUnitY(t), GetRandomReal(0, 360))
                call SetUnitBlendTime(cor, 0)
                call SetUnitAnimation(cor, "decay bone")
                call GroupAddUnit(bj_suspendDecayBoneGroup, cor)
            
                call DestroyEffect(AddSpecialEffect(ExpEx, GetUnitX(t), GetUnitY(t)))
                set TempReal = I2R(10 + (20 * TempInt))
                call Damage_Spell(c, t, TempReal)
            endif
            set c = null
            set t = null
            return false
        endfunction
    
        private function Init takes nothing returns nothing
            local trigger t2 = CreateTrigger()
            call TriggerAddCondition(t2, Condition(function f))
            call Damage_RegisterEvent(t2)
        endfunction
    endscope
    //*******************************************************************************************
    scope DefilingTouchLearn initializer Init
        private struct cache
            unit caster
            group g
        endstruct
        private function cond takes nothing returns boolean
            return GetLearnedSkill() == DefilingTouch_LEARN and IsUnitIllusion(GetTriggerUnit()) == false and GetUnitAbilityLevel(GetTriggerUnit(), GetLearnedSkill()) == 1
        endfunction
        private function Loop takes nothing returns nothing
            local cache data = GetTimerData(GetExpiredTimer())
            local unit e = null
            if GetUnitState(data.caster, UNIT_STATE_LIFE) <= 0. then
                return
            endif
            if GetUnitAbilityLevel(data.caster, DefilingTouch_BUFF_ID) > 0 then
                return
            endif
            set TempX = GetUnitX(data.caster)
            set TempY = GetUnitY(data.caster)
            //call GroupRefresh(data.g)
            call GroupClear(data.g)
            call GroupUnitsInArea(data.g, TempX, TempY, 100.)
            loop
                set e = FirstOfGroup(data.g)
                exitwhen null == e
                call GroupRemoveUnit(data.g, e)
                if GetUnitAbilityLevel(data.caster, DefilingTouch_BUFF_DE) > 0 and GetUnitState(e, UNIT_STATE_LIFE) <= 0. and IsUnitType(e, UNIT_TYPE_HERO) != true and IsUnitType(e, UNIT_TYPE_STRUCTURE) != true and IsUnitType(e, ConvertUnitType(20)) != true then
                    call UnitRemoveAbility(data.caster, DefilingTouch_BUFF_DE)
                    call UnitAddAbility(data.caster, DefilingTouch_BUFF_ID)
                    call SetUnitAbilityLevel(data.caster, DefilingTouch_BUFF_ID, GetUnitAbilityLevel(data.caster, DefilingTouch_LEARN))
                    call RemoveUnit(e)
                    call DestroyEffect(AddSpecialEffect(DefilingTouch_DeathEx, GetUnitX(e), GetUnitY(e)))
                    //call GroupRefresh(data.g)
                    call GroupClear(data.g)
                    set e = null
                    return
                endif
            endloop
            call GroupClear(data.g)
            set e = null
        endfunction
        
        private function f takes nothing returns nothing
            local cache data = cache.create()
            local unit u = GetTriggerUnit()
            local timer t = NewTimer()
            set data.g = CreateGroup()//NewGroup()
            set data.caster = u
            call SetTimerData(t, data)
            call TimerStart(t, 0.35, true, function Loop )
            call UnitAddAbility(u, DefilingTouch_BUFF_ID)
            call SetUnitAbilityLevel(u, DefilingTouch_BUFF_ID, GetUnitAbilityLevel(u, DefilingTouch_LEARN))
            set t = null
            set u = null
        endfunction
    
        private function Init takes nothing returns nothing
            local trigger t = CreateTrigger()
            call AddEvent(t, EVENT_PLAYER_HERO_SKILL)
            call TriggerAddCondition(t, Condition( function cond) )
            call TriggerAddAction(t, function f)
        endfunction
    endscope
    
     
  17. Ngoc LeO

    Ngoc LeO Mario & Luigi

    Tham gia ngày:
    23/7/06
    Bài viết:
    839
    Nơi ở:
    Nothing...
    Vậy nghĩa là mình không sử dụng các damage mà các ability có sẵn trong WE gây ra nữa mà dùng system này deal damage thì mới phân biệt được ?
     
  18. goldviper

    goldviper Mario & Luigi Lão Làng GVN

    Tham gia ngày:
    7/1/10
    Bài viết:
    757
    Nơi ở:
    Tổ dân phố
    @all : thực sự cái vấn đề về phân biệt dam là 1 vấn đề rất nhức nhối khi làm map (với mình là những ability kiểu passive ko phải orbeff hay buff placer) ,lúc làm những skill kiểu này mình thường thêm 1 trigger nữa kiểu
    Mã:
    Unit is Attacked
    Atking unit has skill A
    Turn on Taken Dmg trigger
    Taken dmg trigger sẽ hoạt động và turn off cho lần attked tiếp theo turn on lại ,như vậy thì ít ra nó cũng đỡ được 1 khoản là khi cast dmg spell thì nó ko hoạt động :D
    Thực tế thì cái này chỉ là chống đối tạm thời ,vd mình unit range có 2 skill passive A (hoạt động khi unit is attked và unit taken dmg như đã nói ở trên) và skill shadow strike (1 skill DOT hay dmg over time)
    mình cast ST và 1 unit B ,sau đó ra lệnh tấn công B ,như vậy thì passive sẽ hoạt động trước khi missle của range unit ở trên tới nơi :))
    Nhưng với những unit melee thì kiểu này có vẻ hiệu quả hơn
    hỏi lại
     
    Chỉnh sửa cuối: 27/10/12
  19. Evil_Hunter

    Evil_Hunter Mario & Luigi

    Tham gia ngày:
    18/9/11
    Bài viết:
    786
    Nơi ở:
    Evil Forest
    Ai cho mình hỏi cách import tileset với?
    Có file rồi, import vào thì sửa path ntn?
     
  20. Ngoc LeO

    Ngoc LeO Mario & Luigi

    Tham gia ngày:
    23/7/06
    Bài viết:
    839
    Nơi ở:
    Nothing...
    Ví dụ chèn patch là

    TerrainArt\LordaeronSummer\Lords_Dirt.blp

    Thì cái tile đó sẽ được replace ở tile có tên là Dirt trong LordaeronSummer
     
    Chỉnh sửa cuối: 27/10/12

Chia sẻ trang này