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

Mình có một thắc mắc như thế này:

Trong một timer check một hoặc nhiều unit nhiều lần
Nhiều timer để check từng unit

Thì cái nào sẽ gây lag hơn ?

1 timer thì sẽ ra tình trạng check thống nhất!
còn nhiều timer thì timer ngẫu nhiên!
cuối cùng là 1 timer sẽ ngon hơn! vì timer chạy liên tục nó sẽ ăn hiệu suất nhiều thay vì 1 timer!

ăn hiệu suất ít nhất là event timer!
còn nhiều nhất là Timer (Window)

Các bạn cho mình hỏi, chiêu ShockWave của hero bên orc, nếu muốn Target nào bị dính chiêu bị chậm hay đốt thì sao :v có cần trigger không ? và cho mình quote lại:
"Khi mà Storm Bolt đánh vào target thì sẻ có 1 khoảng thời gian đi từ Caster đến Target mà lúc cast phép thì không đoán được khoảng cách giữa target và caster, cho mình hỏi có trigger nào mà khi cục Storm Bolt đó đập vào target thì mới enable cái trigger mới không ạ "

shockwave nếu muốn target bị chậm gì đó thì phải trigger thôi :|

stormbolt nếu muốn check thì có 1 cách là sử dụng trigger check vị trí khoảng cách (math distance gì đó..) XY giữa AB

ví dụ
distance A và B là có 800 range
lấy 800 chia cho 3600 là missile speed của storm bolt trong object editor kết quả là 0,222 giây

xong lúc này! sử dụng trigger wait theo số 0.222s đó rồi blah blah blah gì đó .. :-"
nhưng thật ra người ta hay sử dụng trigger tạo ra chính missile đó thay vì phải sử dụng cái "đếm" này :-?
 
1 timer thì sẽ ra tình trạng check thống nhất!
còn nhiều timer thì timer ngẫu nhiên!
cuối cùng là 1 timer sẽ ngon hơn! vì timer chạy liên tục nó sẽ ăn hiệu suất nhiều thay vì 1 timer!

ăn hiệu suất ít nhất là event timer!
còn nhiều nhất là Timer (Window)



shockwave nếu muốn target bị chậm gì đó thì phải trigger thôi :|

stormbolt nếu muốn check thì có 1 cách là sử dụng trigger check vị trí khoảng cách (math distance gì đó..) XY giữa AB

ví dụ
distance A và B là có 800 range
lấy 800 chia cho 3600 là missile speed của storm bolt trong object editor kết quả là 0,222 giây

xong lúc này! sử dụng trigger wait theo số 0.222s đó rồi blah blah blah gì đó .. :-"
nhưng thật ra người ta hay sử dụng trigger tạo ra chính missile đó thay vì phải sử dụng cái "đếm" này :-?
Co mình xin trigger mẫu của stormbolt và shockwave được không bạn ơi, mình mò rồi mà không ra chứ không phải đụng đâu hỏi đấy :9cool_pudency:
 
trong jass có cái library.. có ai có thể giải thích dùm cái đó dùng như thế nào không ?
Làm sao mình đưa một Trigger như thế này vào library vậy
Mà nó dùng để làm gì nhỉ?
Mã:
 Setup Units
 Events
 Map initialization
 Conditions
 Actions
 Set HEROES[1] = HeroArchMage
 Set SKILL[1] = (Archmage) Crushing Wave
 Set SKILL[2] = (Archmage) Frost Ball
 Set SKILL[3] = (Archmage) Brilliance Aura
 Set SKILL[4] = (Archmage) Blizzard
 Set HEROES[2] = HeroPaladin
 Set SKILL[5] = (Paladin) SuperHammer
 Set SKILL[6] = (Paladin) Mirror Image
 Set SKILL[7] = (Paladin) Devotion Aura
 Set SKILL[8] = (Paladin) Storm of the Dead
 Set HEROES[3] = HeroMountainKing
 Set SKILL[9] = (Mountain King) Thunder Clap
 Set SKILL[10] = (Mountain King) Storm Bolt
 Set SKILL[11] = (Mountain King) Bash
 Set SKILL[12] = (Mountain King) Avatar
 Set HEROES[4] = BloodMage2
 Set SKILL[13] = (Blood Mage) Flame Strike
 Set SKILL[14] = (Blood Mage) Phoenix
 Set SKILL[15] = (Blood Mage) Banish
 Set SKILL[16] = (Blood Mage) Super Lightning
 Set HEROES[5] = HeroBlademaster
 Set SKILL[17] = (Blade Master) Pháp kiem
 Set SKILL[18] = (Blade Master) Mirror Image
 Set SKILL[19] = [Blade Master] Critical Aura
 Set SKILL[20] = [BladeMaster] Bladestorm
 Set HEROES[6] = HeroFarseer
 Set SKILL[21] = [Far Seer] Chain Lightning
 Set SKILL[22] = [Far Seer] Feral Spirit
 Set SKILL[23] = [Far Seer] Avoid
 Set SKILL[24] = [Far Seer] Sleep
 Set HEROES[7] = HeroTaurenChieftain
 Set SKILL[25] = [Tauren Chieftain] Shockwave
 Set SKILL[26] = [Tauren Chieftain] War Stomp
 Set SKILL[27] = [Tauren Chieftain] Endurance Aura
 Set SKILL[28] = [Tauren Chieftain] Reincarnation
 Set HEROES[8] = ShadowHunter
 Set SKILL[29] = [ShadowHunter] Healing Ward (Witch Doctor)
 Set SKILL[30] = [Shadow Hunter] Voodoo Spirits
 Set SKILL[31] = [Shadow Hunter] Hex
 Set SKILL[32] = [Shadow Hunter] Big Bad Voodoo
 Set HEROES[9] = HeroDeathKnight
 Set SKILL[33] = [Death Knight] Circle of Death
 Set SKILL[34] = [Death Knight] Death Stomp
 Set SKILL[35] = [Death Knight] Unholy Aura
 Set SKILL[36] = [Death Knight] Animate Dead
 Set HEROES[10] = LichVersion2
 Set SKILL[37] = [Lich] Frost Nova
 Set SKILL[38] = [Lich] Frost Attack
 Set SKILL[39] = [Lich] Frost Armor (Autocast)
 Set SKILL[40] = [Lich] Hand of Frost
 Set HEROES[11] = HeroDreadLord
 Set SKILL[41] = [Dreadlord] Carrion Swarm
 Set SKILL[42] = [Dreadlord] Sleep
 Set SKILL[43] = [Dreadlord] Vampiric Aura
 Set SKILL[44] = [Dreadlord] RockFireFall
 Set HEROES[12] = HeroCryptLord
 Set SKILL[45] = [Crypt Lord] Impale
 Set SKILL[46] = [Crypt Lord] Carrion Beetles
 Set SKILL[47] = [Crypt Lord] Spiked Carapace
 Set SKILL[48] = [Crypt Lord] Locust Swarm
 Set HEROES[13] = KeeperoftheGrove
 Set SKILL[49] = [Keeper of the Grove] Feral Spirit
 Set SKILL[50] = [Keeper of the Grove] Hidden
 Set SKILL[51] = [Keeper of the Grove] Thorns Aura
 Set SKILL[52] = [Keeper of the Grove] Circle Spirit
 Set HEROES[14] = PriestessOfTheMoon
 Set SKILL[53] = [Priestess of the Moon] Starfall
 Set SKILL[54] = [Priestess of the Moon] Searing Arrows
 Set SKILL[55] = [Priestess of the Moon] Trueshot Aura
 Set SKILL[56] = [Priestess of the Moon] Spirit of Moon
 Set HEROES[15] = Warden2
 Set SKILL[57] = [Warden] Fan of Knives
 Set SKILL[58] = [Warden] Shadow Strike
 Set SKILL[59] = [Warden] Blink
 Set SKILL[60] = [Warden] Poison Bolt
 Set HEROES[16] = EvilIllidan
 Set SKILL[61] = [Demon Hunter] KiemKhi
 Set SKILL[62] = [Demon Hunter] Immolation
 Set SKILL[63] = [Demon Hunter] Evasion
 Set SKILL[64] = [Demon Hunter] Metamorphosis
 Set HEROES[17] = FelGuardBlue
 Set SKILL[65] = [FelGuardBlue] Storm Bolt
 Set SKILL[66] = [FelGuardBlue] Mana Burn
 Set SKILL[67] = [FelGuardBlue] Cleaving Attack
 Set SKILL[68] = [FelGuardBlue] Mirror Image
 Set HEROES[18] = HeroAlchemist
 Set SKILL[69] = [Alchemist] Chemical Rage
 Set SKILL[70] = [Alchemist] Acid Bomb
 Set SKILL[71] = [Alchemist] Healing Spray
 Set SKILL[72] = [Alchemist] Transmute
 Set HEROES[19] = HeroTinker
 Set SKILL[73] = [Tinker] Cluster Rockets
 Set SKILL[74] = [Tinker] Pocket Factory
 Set SKILL[75] = [Tinker] Machine Crazy
 Set SKILL[76] = [Tinker] Robo-Goblin
 Set HEROES[20] = Kiljaedin
 Set SKILL[77] = [Warlock] Fast & Furious
 Set SKILL[78] = [Warlock] Breath of Fire
 Set SKILL[79] = [Warlock] Charm
 Set SKILL[80] = [Warlock] Rain of Fire
 Set HEROES[21] = Arthas
 Set SKILL[81] = [Arthas] Swords
 Set SKILL[82] = [Arthas] Forked Lightning
 Set SKILL[83] = [Arthas] Holy Light Aura
 Set SKILL[84] = [Arthas] Electrical Attack
 Set HEROES[22] = BansheeRanger
 Set SKILL[85] = [BansheeRanger] Poison Arrow
 Set SKILL[86] = [BansheeRanger] Black Arrow
 Set SKILL[87] = [BansheeRanger] Silence
 Set SKILL[88] = [BansheeRanger] Charm
 Set HEROES[23] = HeroAvatarOfFlame
 Set SKILL[89] = [AvatarOfFlame] Summon Lava Spawn
 Set SKILL[90] = [AvatarOfFlame] Soul Burn
 Set SKILL[91] = [AvatarOfFlame] Incinerate
 Set SKILL[92] = [AvatarOfFlame] Volcano
 Set HEROES[24] = Thrall
 Set SKILL[93] = [Thrall] Lightning Shield
 Set SKILL[94] = [Thrall] Storm Bolt
 Set SKILL[95] = [Thrall] Spell Shield
 Set SKILL[96] = [Thrall] Chain Lightning
 
làm 1 mãng chứa cái skill thui mà bạn, khi nào cần gọi mạng skill đó ra sử dụng
skill gán cho hero, khi gọi hero là hiểu các skill hero đó có, đại loại vậy @@
 
làm 1 mãng chứa cái skill thui mà bạn, khi nào cần gọi mạng skill đó ra sử dụng
skill gán cho hero, khi gọi hero là hiểu các skill hero đó có, đại loại vậy @@

cái trigger ở dưới thì mình viết ra để dùng.. vấn đề mình muốn hỏi là cái Library.. vì có người kêu mình đưa vào library nên mình mới cần kiến thức về nó bạn à..
Vì mình cần làm việc với một system trên vJass mà không hiểu cái library nó như thế nào .. mình cũng là dân ngoại đạo lập trình nên hỏi cho chắc :D
 
Co mình xin trigger mẫu của stormbolt và shockwave được không bạn ơi, mình mò rồi mà không ra chứ không phải đụng đâu hỏi đấy :9cool_pudency:

chỉ có stormbolt thôi! tại chưa có time :|
http://www.mediafire.com/?21rqrczmrpjio4h

cái trigger ở dưới thì mình viết ra để dùng.. vấn đề mình muốn hỏi là cái Library.. vì có người kêu mình đưa vào library nên mình mới cần kiến thức về nó bạn à..
Vì mình cần làm việc với một system trên vJass mà không hiểu cái library nó như thế nào .. mình cũng là dân ngoại đạo lập trình nên hỏi cho chắc :D

library là thư viện function. nó chỉ có nhiệm vụ là chứa các function hoặc các var thôi! cho dù cho vào library thì nó cũng như thế! chỉ tiện được cái viết = text chứ không phải là click chọn chọn.. kiểu GUI.

muốn cho vào library thì converter custom text trong trigger editor >> File >> sau đó viết 1 dòng
library <myName>
//copy hết mấy cái set ??? = ?? vào đây hết...
endlibrary
 
Chỉnh sửa cuối:
Ồ nếu vậy thì lúc mình đưa vào Library thì cũng đưa biến udg_SKILL[..] vào hay là mình tạo một global nhỉ..
rồi khi mình dùng qua một hàm khác thì mình gọi nó như thế nào ?

À mà tại sao mình dùng cái Trigger kia để set mấy cái variable mà lúc dùng thì không được.. nên người ta khuyên đưa vào library.. mà mình thì chả hiểu tại sao họ lại bảo dùng library lại xài được nhi?
Có sự khác nhau nào chăng?
 
Chỉnh sửa cuối:
Mình có 2 item: 1 20% chance Crit và 1 40% Chance Crit

Trường hợp 1: Cooldown Group: Critical Strike Chance ( lấy từ 1 cái)

Trường hợp 2: Cooldown Group: 20% Chance Crit và Cooldown Group: 40% Chance Crit

Vậy có trường hợp nào cộng dồn số % Crit lại = 60% hay ko, hay là 2 cái Crit hoạt động riêng lẻ ? Ví dụ 1 đòn đánh thì có khả năng bật cả 2 cái crit để từ x2 mỗi crit thành = x4 cho đòn đánh ko ?
 
Ồ nếu vậy thì lúc mình đưa vào Library thì cũng đưa biến udg_SKILL[..] vào hay là mình tạo một global nhỉ..
rồi khi mình dùng qua một hàm khác thì mình gọi nó như thế nào ?

À mà tại sao mình dùng cái Trigger kia để set mấy cái variable mà lúc dùng thì không được.. nên người ta khuyên đưa vào library.. mà mình thì chả hiểu tại sao họ lại bảo dùng library lại xài được nhi?
Có sự khác nhau nào chăng?

udg_ là để cho bít là var tạo từ GUI thôi! :|

như thế nào mới là không dc ? hay send pic cho tớ coi thử! và nó báo lỗi thế nào!


Mình có 2 item: 1 20% chance Crit và 1 40% Chance Crit

Trường hợp 1: Cooldown Group: Critical Strike Chance ( lấy từ 1 cái)

Trường hợp 2: Cooldown Group: 20% Chance Crit và Cooldown Group: 40% Chance Crit

Vậy có trường hợp nào cộng dồn số % Crit lại = 60% hay ko, hay là 2 cái Crit hoạt động riêng lẻ ? Ví dụ 1 đòn đánh thì có khả năng bật cả 2 cái crit để từ x2 mỗi crit thành = x4 cho đòn đánh ko ?

Crit nếu có cái có thông số lớn hơn thì đó sẽ là ưu tiên còn nếu = thì sẽ dạng như A và B cùng nhau chance! cũng ko dc coi là + dồn cả :|
 
À.. mình hiểu vấn đề rồi.. tìm kiếm trên mạng thì thấy nói rằng.. Library cũng tương tự như Scope.. chỉ khác nhau ở chỗ khi chạy map thì những thứ nằm trong cái Library nó sẽ được đưa lên đầu map (chắc là chạy trước tiên). Do mình sử dụng cái trigger set biến kia cho một cái system. Mà ngặc nổi system kia nó dùng library nên mình đoán chắc là thằng System nó chạy trước khi cái trigger GUI được set. Nên nó không hoạt động..

Tại mình muốn đưa cái system này vào map thay cho cái AI của map mình.. nên nghiên cứu... mà làm thất bại nên đã backup về AI cũ xài tạm :D..

Cái AI mà mình muốn dùng ở đây nè.
http://www.hiveworkshop.com/forums/spells-569/hero-ai-v4-3-4-a-209141/index5.html

Bạn làm việc với vJass nhiều cho mình ý kiến xem sao.. không biết mấy cái đó mình đọc có đúng không nữa :D.. vì mình cũng không hiểu cái đoạn Đưa lên đầu map là như thế nào thôi .. chỉ đoán mò không biết chính xác không :D
[spoil]
PHP:
Setup Units
 Events
 Map initialization
 Conditions
 Actions
 Set HEROES[1] = HeroArchMage
 Set SKILL[1] = (Archmage) Crushing Wave
 Set SKILL[2] = (Archmage) Frost Ball
 Set SKILL[3] = (Archmage) Brilliance Aura
 Set SKILL[4] = (Archmage) Blizzard
 Set HEROES[2] = HeroPaladin
 Set SKILL[5] = (Paladin) SuperHammer
 Set SKILL[6] = (Paladin) Mirror Image
 Set SKILL[7] = (Paladin) Devotion Aura
 Set SKILL[8] = (Paladin) Storm of the Dead
 Set HEROES[3] = HeroMountainKing
 Set SKILL[9] = (Mountain King) Thunder Clap
 Set SKILL[10] = (Mountain King) Storm Bolt
 Set SKILL[11] = (Mountain King) Bash
 Set SKILL[12] = (Mountain King) Avatar
 Set HEROES[4] = BloodMage2
 Set SKILL[13] = (Blood Mage) Flame Strike
 Set SKILL[14] = (Blood Mage) Phoenix
 Set SKILL[15] = (Blood Mage) Banish
 Set SKILL[16] = (Blood Mage) Super Lightning
 Set HEROES[5] = HeroBlademaster
 Set SKILL[17] = (Blade Master) Pháp kiem
 Set SKILL[18] = (Blade Master) Mirror Image
 Set SKILL[19] = [Blade Master] Critical Aura
 Set SKILL[20] = [BladeMaster] Bladestorm
 Set HEROES[6] = HeroFarseer
 Set SKILL[21] = [Far Seer] Chain Lightning
 Set SKILL[22] = [Far Seer] Feral Spirit
 Set SKILL[23] = [Far Seer] Avoid
 Set SKILL[24] = [Far Seer] Sleep
 Set HEROES[7] = HeroTaurenChieftain
 Set SKILL[25] = [Tauren Chieftain] Shockwave
 Set SKILL[26] = [Tauren Chieftain] War Stomp
 Set SKILL[27] = [Tauren Chieftain] Endurance Aura
 Set SKILL[28] = [Tauren Chieftain] Reincarnation
 Set HEROES[8] = ShadowHunter
 Set SKILL[29] = [ShadowHunter] Healing Ward (Witch Doctor)
 Set SKILL[30] = [Shadow Hunter] Voodoo Spirits
 Set SKILL[31] = [Shadow Hunter] Hex
 Set SKILL[32] = [Shadow Hunter] Big Bad Voodoo
 Set HEROES[9] = HeroDeathKnight
 Set SKILL[33] = [Death Knight] Circle of Death
 Set SKILL[34] = [Death Knight] Death Stomp
 Set SKILL[35] = [Death Knight] Unholy Aura
 Set SKILL[36] = [Death Knight] Animate Dead
 Set HEROES[10] = LichVersion2
 Set SKILL[37] = [Lich] Frost Nova
 Set SKILL[38] = [Lich] Frost Attack
 Set SKILL[39] = [Lich] Frost Armor (Autocast)
 Set SKILL[40] = [Lich] Hand of Frost
 Set HEROES[11] = HeroDreadLord
 Set SKILL[41] = [Dreadlord] Carrion Swarm
 Set SKILL[42] = [Dreadlord] Sleep
 Set SKILL[43] = [Dreadlord] Vampiric Aura
 Set SKILL[44] = [Dreadlord] RockFireFall
 Set HEROES[12] = HeroCryptLord
 Set SKILL[45] = [Crypt Lord] Impale
 Set SKILL[46] = [Crypt Lord] Carrion Beetles
 Set SKILL[47] = [Crypt Lord] Spiked Carapace
 Set SKILL[48] = [Crypt Lord] Locust Swarm
 Set HEROES[13] = KeeperoftheGrove
 Set SKILL[49] = [Keeper of the Grove] Feral Spirit
 Set SKILL[50] = [Keeper of the Grove] Hidden
 Set SKILL[51] = [Keeper of the Grove] Thorns Aura
 Set SKILL[52] = [Keeper of the Grove] Circle Spirit
 Set HEROES[14] = PriestessOfTheMoon
 Set SKILL[53] = [Priestess of the Moon] Starfall
 Set SKILL[54] = [Priestess of the Moon] Searing Arrows
 Set SKILL[55] = [Priestess of the Moon] Trueshot Aura
 Set SKILL[56] = [Priestess of the Moon] Spirit of Moon
 Set HEROES[15] = Warden2
 Set SKILL[57] = [Warden] Fan of Knives
 Set SKILL[58] = [Warden] Shadow Strike
 Set SKILL[59] = [Warden] Blink
 Set SKILL[60] = [Warden] Poison Bolt
 Set HEROES[16] = EvilIllidan
 Set SKILL[61] = [Demon Hunter] KiemKhi
 Set SKILL[62] = [Demon Hunter] Immolation
 Set SKILL[63] = [Demon Hunter] Evasion
 Set SKILL[64] = [Demon Hunter] Metamorphosis
 Set HEROES[17] = FelGuardBlue
 Set SKILL[65] = [FelGuardBlue] Storm Bolt
 Set SKILL[66] = [FelGuardBlue] Mana Burn
 Set SKILL[67] = [FelGuardBlue] Cleaving Attack
 Set SKILL[68] = [FelGuardBlue] Mirror Image
 Set HEROES[18] = HeroAlchemist
 Set SKILL[69] = [Alchemist] Chemical Rage
 Set SKILL[70] = [Alchemist] Acid Bomb
 Set SKILL[71] = [Alchemist] Healing Spray
 Set SKILL[72] = [Alchemist] Transmute
 Set HEROES[19] = HeroTinker
 Set SKILL[73] = [Tinker] Cluster Rockets
 Set SKILL[74] = [Tinker] Pocket Factory
 Set SKILL[75] = [Tinker] Machine Crazy
 Set SKILL[76] = [Tinker] Robo-Goblin
 Set HEROES[20] = Kiljaedin
 Set SKILL[77] = [Warlock] Fast & Furious
 Set SKILL[78] = [Warlock] Breath of Fire
 Set SKILL[79] = [Warlock] Charm
 Set SKILL[80] = [Warlock] Rain of Fire
 Set HEROES[21] = Arthas
 Set SKILL[81] = [Arthas] Swords
 Set SKILL[82] = [Arthas] Forked Lightning
 Set SKILL[83] = [Arthas] Holy Light Aura
 Set SKILL[84] = [Arthas] Electrical Attack
 Set HEROES[22] = BansheeRanger
 Set SKILL[85] = [BansheeRanger] Poison Arrow
 Set SKILL[86] = [BansheeRanger] Black Arrow
 Set SKILL[87] = [BansheeRanger] Silence
 Set SKILL[88] = [BansheeRanger] Charm
 Set HEROES[23] = HeroAvatarOfFlame
 Set SKILL[89] = [AvatarOfFlame] Summon Lava Spawn
 Set SKILL[90] = [AvatarOfFlame] Soul Burn
 Set SKILL[91] = [AvatarOfFlame] Incinerate
 Set SKILL[92] = [AvatarOfFlame] Volcano
 Set HEROES[24] = Thrall
 Set SKILL[93] = [Thrall] Lightning Shield
 Set SKILL[94] = [Thrall] Storm Bolt
 Set SKILL[95] = [Thrall] Spell Shield
 Set SKILL[96] = [Thrall] Chain Lightning
PHP:
//==========================================================================================
// This is separated from the main system of HeroAI to provide better organization.
// It covers how the AI will learn skills.
//
// When MULTIPLE_SKILLS_PER_LVL is true, you can register as many as MAX_SKILL_PER_LVL spells
// to one level for a hero in case you want your hero to learn multiple skills at one level.
//##########################################################################################
// Function API:
//
//  * RegisterHeroAISkill takes integer unitTypeId, integer level, integer spellId *
//      Registers the spell that a hero of unitTypeId should learn at level.
//      This is provided as an alternative way of setting up skills in a custom AI and is 
//      recommended to do so then registering skills here.
//==========================================================================================

// Please don't call this textmacro.
//! textmacro HeroAILearnset

    globals
        private constant integer    MAX_SKILL_LVL           = 140   // The level at which the hero learns all of its skills
        private constant boolean    HAVE_MORPH_HEROES       = true  // Set to true if you have heroes that can morph
        private constant boolean    MULTIPLE_SKILLS_PER_LVL = true  // Set to true if you want learnsets to register more than one skill per level
        private constant integer    MAX_SKILL_PER_LVL       = 2     // The max number of skills a hero can learn every level. Only configure this if you have MULTIPLE_SKILLS_PER_LVL set to true. 
    endglobals    
    
    // The following allow better ease of configuration
    private keyword Learnset
    static if HAVE_MORPH_HEROES then
    private keyword MorphHeroType
    endif
    globals
        private Learnset LearnsetInfo
    endglobals
    
    // Configures how the heroes learn skills by unit-type id.
    // You need to override this function with your own heroes and their skills.
    
    // You should also set up any morphing heroes to their normal unit-type id so
    // that you won't need to copy a learnset again.
    private function SetupLearnset takes nothing returns nothing
        local integer A //tuc la Level , khi no len toi level A thi no hoc skill o duoi
        local integer const = 36
        local integer B
        local integer n
        local integer IdSpell
        local integer IdHero
        // Learnset Syntax:
        // set LearnsetInfo[LEVEL OF HERO][HERO UNIT-TYPE ID] = SKILL ID
  
      //Danh cho skill binh thuong cua 24 Hero. 24x3 = 72 skill thuong`
      // Voi skill dac biet có 24 skill
set n = 1
    loop
        exitwhen n>24
        set B = 1
        loop
            exitwhen B>4
                if B!=4 then //Neu B = 4 tuc la nam trong khoang skill dac biet thi set qua 1 ve^' khác.
                        loop // o tren nay la hàm dành cho các skill binh thuong
                            set A = B
                                exitwhen A>(const+B)
                                    set IdSpell = udg_SKILL[B+3*n+(n-4)]
                                    set IdHero = udg_HEROES[n]
                                    set LearnsetInfo[A][IdHero] = IdSpell
                             set   A = A+4
                        endloop
                    else // o phia duoi nay la ham` danh` cho cac skill dac biet.
                        loop
                            set A = B+2
                                exitwhen A>(const+B)
                                   
                                    set IdSpell = udg_SKILL[B+3*n+(n-4)]
                                    set IdHero = udg_HEROES[n]
                                    set LearnsetInfo[A][IdHero] = IdSpell

                               set A = A+8
                        endloop
                endif
            set B=B+1    
        endloop
        set n=n+1
    endloop
        // Sau khi co hàm trên thì phai set skill theo thu tu. 
        //1 2 3 skill thuong, 4 skill dac biet. Cu nhu vay sap xep dung vi tri.
        
        //phia duoi nay` la ban goc. neu xem lai thi` duoi nay` la mau~ day

        set MorphHeroType['N009'] = 'N00B'    
        set MorphHeroType['N008'] = 'N00A'    
        set MorphHeroType['E007'] = 'E00B' 
    endfunction

//==========================================================================================
// END OF USER CONFIGURATION
//==========================================================================================

    private function MakeAILearnSkills takes nothing returns nothing
        local unit u = GetTriggerUnit() 
        local integer typeId = GetUnitTypeId(u)
        static if MULTIPLE_SKILLS_PER_LVL then
        
        local integer i = 0
        
        endif
        if heroesAI.has(GetHandleId(u)) and GetHeroSkillPoints(u) > 0 then
            static if HAVE_MORPH_HEROES then
            
            if MorphHeroType.has(typeId) then
                set typeId = MorphHeroType[typeId]
            endif
            
            endif
            
            static if MULTIPLE_SKILLS_PER_LVL then
            
            loop
                exitwhen i == LearnsetInfo[GetUnitLevel(u)].skillNum(typeId)
                call SelectHeroSkill(u, LearnsetInfo[GetUnitLevel(u)].getSkill(typeId, i))
                set i = i + 1
            endloop
            
            else
            
            call SelectHeroSkill(u, LearnsetInfo[GetUnitLevel(u)][typeId])
            
            endif
        endif
        set u = null
    endfunction
    
    static if HAVE_MORPH_HEROES then
    
    private module MorphSuperHack
        static method onInit takes nothing returns nothing
            set thistype.info = Table.create()
        endmethod
    endmodule
    
    struct MorphHeroType extends array
        private static Table info
        
        static method operator [] takes integer morphedTypeId returns integer
            return info[morphedTypeId]
        endmethod
        
        static method operator []= takes integer morphedTypeId, integer originalTypeId returns nothing
            set info[morphedTypeId] = originalTypeId
        endmethod
        
        static method has takes integer morphedTypeId returns boolean
            return info.has(morphedTypeId)
        endmethod
        
        implement MorphSuperHack
    endstruct
    
    endif
    
    
    static if MULTIPLE_SKILLS_PER_LVL then
    
    private module RawIdIndexerInit
        static method onInit takes nothing returns nothing
            set thistype.info = Table.create()
        endmethod
    endmodule
    
    private struct RawIdIndexer
        static Table info
        static integer count = -1 // Zero-based indexing due to array storage
        
        implement RawIdIndexerInit
    endstruct
    
    private function RawId2Index takes integer rawId returns integer
        if RawIdIndexer.info.has(rawId) then
            return RawIdIndexer.info[rawId]
        endif
        set RawIdIndexer.count = RawIdIndexer.count + 1
        set RawIdIndexer.info[rawId] = RawIdIndexer.count
        return RawIdIndexer.count
    endfunction
    
    struct SkillArray extends array
        private static integer array skills     // Stores the skills based on hero raw id (indexed) and level it should be learned
        private static integer array skillNums  // Number of skills for a particular level
        
        // "this" refers to the level (zero-based) that the skill will be learned at
        
        method operator []= takes integer r, integer s returns nothing 
            local integer index
            set r = RawId2Index(r)
            set index = this + r * MAX_SKILL_LVL
            
            static if DEBUG_MODE then
            
            if index + skillNums[index] > 8190 then
                call BJDebugMsg("[Hero AI Learnset] Error: Index is too high, try lowering MAX_SKILL_PER_LVL?")
                return
            endif
            
            endif
            
            if skillNums[index] < MAX_SKILL_PER_LVL then                
                set skills[index + skillNums[index]] = s
                set skillNums[index] = skillNums[index] + 1
            debug else
                debug call BJDebugMsg("[Hero AI Learnset] Error: Exceeding the registration of skills to level " + I2S(this + 1))
            endif
        endmethod
        
        method getSkill takes integer r, integer whichOne returns integer
            return skills[(this + RawId2Index(r) * MAX_SKILL_LVL) + whichOne]
        endmethod
        
        method skillNum takes integer r returns integer
            return skillNums[this + RawId2Index(r) * MAX_SKILL_LVL]
        endmethod
    endstruct
    
    endif    
    
    private module M
        static method onInit takes nothing returns nothing            
            set LearnsetInfo = thistype.create()
            call RegisterPlayerUnitEvent(EVENT_PLAYER_HERO_LEVEL, function MakeAILearnSkills)
            call SetupLearnset()
        endmethod
    endmodule
    
    // Wrapper to make things look better and cheat the zero-indexed Table.
    // Only one instance will be created and used.
    struct Learnset extends array  
    
        static if MULTIPLE_SKILLS_PER_LVL then
        
        method operator [] takes integer lvl returns SkillArray
            static if DEBUG_MODE then
            
            if lvl > MAX_SKILL_LVL then
                call BJDebugMsg("[Hero AI Learnset] Error: Level of " + I2S(lvl) + " is higher than MAX_SKILL_LVL")
                return 0
            endif
            
            endif
            
            return lvl - 1
        endmethod
        
        else
        
        private static TableArray info
        
        method operator [] takes integer lvl returns Table
            static if DEBUG_MODE then
            
            if lvl > MAX_SKILL_LVL then
                call BJDebugMsg("[Hero AI Learnset] Error: Level of " + I2S(lvl) + " is higher than MAX_SKILL_LVL")
                return 0
            endif
            
            endif

            return info[lvl - 1]
        endmethod
        
        endif  
        
        static method create takes nothing returns thistype
            static if not MULTIPLE_SKILLS_PER_LVL then
            
            set info = TableArray[MAX_SKILL_LVL]
            
            endif
            return 1
        endmethod
        
        implement M
    endstruct
    
    function RegisterHeroAISkill takes integer unitTypeId, integer level, integer spellId returns nothing
        set LearnsetInfo[level][unitTypeId] = spellId
    endfunction
    
//! endtextmacro
[/spoil]
 
cho mình hỏi làm thế nào để tạo giới hạn số unit của 1 skill summon nhỉ
vd: sm tối đa 2 unit ,đến unit thứ 3 thì kill unit thứ 1 ,khó là ở chỗ ko biết unit thứ nhất là unit nào ,tương tự sau đó sm thì kill unit thứ 2 ,vv...
Nếu skill này có 1lv thì dùng biến đếm ko vấn đề gì nhưng nếu vd lv2 là tối đa 3 unit ,lv3 tối đa 4 unit thì sao 8-}
 
cho mình hỏi làm thế nào để tạo giới hạn số unit của 1 skill summon nhỉ
vd: sm tối đa 2 unit ,đến unit thứ 3 thì kill unit thứ 1 ,khó là ở chỗ ko biết unit thứ nhất là unit nào ,tương tự sau đó sm thì kill unit thứ 2 ,vv...
Nếu skill này có 1lv thì dùng biến đếm ko vấn đề gì nhưng nếu vd lv2 là tối đa 3 unit ,lv3 tối đa 4 unit thì sao 8-}

Dùng skill mặc định của War3 là Feral Spirit..., skill gọi sói ấy.
 
Feral Spirit chỉ summon giới hạn 1 lần thôi ~_~. Tức là có cast bao nhiêu lần thì cũng xóa bộ công cụ lao động̃ và lấy con mới thế vào.

Bạn có thể thử sử dụng spell Carrion Beetles, đáp ứng dc nguyện vọng của bạn tuy có điều là phải cast trên corpse.
 
Ai có thể viết giúp mình trigger ramdom bằng cách viết -ar hay -ramdom gì không, bác gút gồ toàn chỉ mấy cái trigger mà sau khi -ar or -ramdom toàn ra cứ 1 loại tướng ( kể cả onl và off)
 
Có ai biết tại sao tạo hay move nhiều unit vào 1 tiles Abyss thì bị critical error ko .VD : mình cast skill kiểu meat hook (tạo nhiều mấy cái mắt xích ý) liên tục vào khoảng có Abyss thì bị bay ra ngoài game .Mình cast ngoài nền đất bằng phẳng thì ko sao ,hay là do chênh lệch cliff cũng ko biết nữa
đây mình post tạm đoạn trigger mình tạo ,chắc chắn là ko có leak gì
Mã:
Else - Actions
    -------- //////////////////////////////////////////////////////////////////// --------
    -------- CHAIN --------
    -------- //////////////////////////////////////////////////////////////////// --------
    Unit Group - Pick every unit in VB_CHAIN_GROUP and do (Actions)
        Loop - Actions
            Unit - Kill (Picked unit)
            Unit - Remove (Picked unit) from the game
    Unit Group - Remove all units from VB_CHAIN_GROUP
    Set VB_CASTERLOC = (Position of CASTER[0])
    Set VB_MISSLELOC = (Position of VB_PROJECT)
    Set VB_CHAIN_NUMBER = (Integer(((Distance between VB_CASTERLOC and VB_MISSLELOC) / 50.00)))
    For each (Integer A) from 1 to VB_CHAIN_NUMBER, do (Actions)
        Loop - Actions
            Set VB_CHAINLOC[(Integer A)] = (VB_CASTERLOC offset by (50.00 x (Real((Integer A)))) towards (Angle from VB_CASTERLOC to VB_MISSLELOC) degrees)
            Unit - Create 1 Dummy for (Owner of CASTER[0]) at VB_CHAINLOC[(Integer A)] facing (Angle from VB_CASTERLOC to VB_MISSLELOC) degrees
            Special Effect - Create a special effect attached to the origin of (Last created unit) using Abilities\Weapons\WardenMissile\WardenMissile.mdl
            Animation - Change (Last created unit)'s size to (150.00%, 150.00%, 150.00%) of its original size
            Unit - Add a 0.05 second Generic expiration timer to (Last created unit)
            Unit - Add Crow Form to (Last created unit)
            Animation - Change (Last created unit) flying height to 75.00 at 0.00
            Unit - Remove Crow Form from (Last created unit)
            Unit - Turn collision for (Last created unit) Off
            Unit - Pause (Last created unit)
            Unit Group - Add (Last created unit) to VB_CHAIN_GROUP
            Custom script:   call RemoveLocation (udg_VB_CHAINLOC[bj_forLoopAIndex])
    Custom script:   call RemoveLocation (udg_VB_CASTERLOC)
    Custom script:   call RemoveLocation (udg_VB_MISSLELOC)
 
Mọi người cho mình hỏi cách lưu biến hay struct bằng rawcode với ví dụ:

set TempInt=GetUnitTypeId(GetTriggerUnit())
set StructVar[TempInt]=this
 
tại sao ReloadGameCachesFromDisk() lại khiến map bị lỗi vụ không đồng bộ với replay nhỉ :(
tức trong lúc chơi map mình đã mua tướng ra, săn creep. lên lv. nhưng trong lúc coi lại replay thì chỉ là "1 thời gian dài chẳng làm gì cả trong lúc đang coi cái ngôi nhà Tarven "đó :| ai bít vụ hok :|
 
Chỉnh sửa cuối:
Mọi người cho mình hỏi cách lưu biến hay struct bằng rawcode với ví dụ:

set TempInt=GetUnitTypeId(GetTriggerUnit())
set StructVar[TempInt]=this

lưu theo "type" của unit á? vậy nhiều unit cùng một type thì trùng nhau?

thường sử dụng GetHandleId(GetTriggerUnit()) vì mỗi unit có một "handle id" riêng, không trùng nhau. Nhưng số này quá lớn để sử dụng cho array.

với vụ trên, ta có hai cách:

- dùng Hashtable: call SaveInteger( udg_Hashtable, GetHandleId(GetTriggerUnit()), StringHash("StructVar"), this )

- dùng index system: (ví dụ: AutoIndex)
với hệ thống index, mỗi unit sẽ được gắn một integer từ 0 đến "tổng số unit", như vậy ta có thể sử dụng cho array.

set StructVar[ GetUnitId(GetTriggerUnit()) ] = this

hàm GetUnitId được cung cấp bởi hệ thống index

tại sao ReloadGameCachesFromDisk() lại khiến map bị lỗi vụ không đồng bộ với replay nhỉ :(
tức trong lúc chơi map mình đã mua tướng ra, săn creep. lên lv. nhưng trong lúc coi lại replay thì chỉ là "1 thời gian dài chẳng làm gì cả trong lúc đang coi cái ngôi nhà Tarven "đó :| ai bít vụ hok :|

sao lại dùng ReloadGameCachesFromDisk? nói rõ ra chứ?
 
Back
Top