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

Mã:
library IceArrow initializer Init requires xedamage, xemissile

globals
  private constant integer SPELLID = 'A003'
  private constant string MISSILE = "Abilities\\Weapons\\LichMissile\\LichMissile.mdl"
  private constant real SCALE = 2.
  private constant real OFFSET = 60.
  private constant real SPEED = 550.
  private constant real ARC = 0.25
endglobals

private function Damage takes unit caster returns real
  return I2R(GetUnitAbilityLevel(caster, SPELLID)/2)+I2R(GetHeroInt(caster, true))
endfunction

private function setupDamageOptions takes xedamage d returns nothing
  set d.dtype = DAMAGE_TYPE_MAGIC
  set d.atype = ATTACK_TYPE_HERO
  
  set d.exception = UNIT_TYPE_STRUCTURE
endfunction

globals
  private xedamage damageOptions
endglobals

struct IceArrowAct extends xemissile
  private unit caster
  private integer level
  static method create takes unit caster, integer level, real tx, real ty returns IceArrowAct
    local real x = GetUnitX(caster)
    local real y = GetUnitY(caster)
    local real z = GetUnitFlyHeight(caster)+OFFSET
    local IceArrowAct this = IceArrowAct.allocate(x,y,z,tx,ty,0.0)
    
    set this.caster = caster
    set this.level = level
    set this.fxpath = MISSILE
    set this.scale = SCALE
    call this.launch(SPEED, ARC)
  return this
  endmethod
  
  method onHit takes nothing returns nothing
    call damageOptions.damageTarget(.caster, .targetUnit, Damage(.caster))
  endmethod
endstruct

private function spellIdMatch takes nothing returns boolean
  return GetSpellAbilityId()==SPELLID
endfunction

private function onSpellEffect takes nothing returns nothing
  local real tx = GetSpellTargetX()
  local real ty = GetSpellTargetY()
  local unit hero = GetTriggerUnit()
  local integer level = GetUnitAbilityLevel(hero, SPELLID)
  local IceArrowAct fb = IceArrowAct.create(hero,level,tx,ty)
  set hero = null
endfunction

private function Init takes nothing returns nothing
  local trigger t = CreateTrigger()
  
  set damageOptions = xedamage.create()
  call setupDamageOptions(damageOptions)
  
  call TriggerRegisterAnyUnitEventBJ(t, EVENT_PLAYER_UNIT_SPELL_EFFECT)
  call TriggerAddCondition(t, Condition(function spellIdMatch))
  call TriggerAddAction(t, function onSpellEffect)
  set t = null
endfunction

endlibrary

bác nào xem giúp e cái trigger này sao nó k hoạt động????
 
Cho mình hỏi một phát là cái item life steel (Mark Of Death) trong WE mình chuyển nó thành ability hero (tích true vào đó) cho hero học nhưng sao vào game khi click vào skill đó thì ko thấy icon đâu để mà học nữa, các bác nào pro chỉ mình cách làm item nó thành 1 skill bình thường dùm mình
 
Cho mình hỏi cái này:
Một Hero mình cho 3 skill như thế này:
Một skill dựa trên Impale.
Một skill dựa trên Entanglingroots.
Một skill tạo dummy, cast Impale ra các phía xung quanh.
Các skill impale có airtime=0.01
Tất cả skill hoạt động bình thường. Khi cast các skill trên vào một unit nào đó, unit đó vẫn mất máu, tuy nhiên khi unit đó chưa hết bị đơ hay trói, dùng tiếp 1 trong 2 skill còn lại thì unit đó không mất máu :|
Nghĩa là một unit không nhận damage từ quá 1 skill cùng lúc. Trong khi trong dota, khi chơi wtf, tất cả skill ko có cooldown, cast Impale liên tục vẫn mất damage.
 
Cho mình hỏi cái này:
Một Hero mình cho 3 skill như thế này:
Một skill dựa trên Impale.
Một skill dựa trên Entanglingroots.
Một skill tạo dummy, cast Impale ra các phía xung quanh.
Các skill impale có airtime=0.01
Tất cả skill hoạt động bình thường. Khi cast các skill trên vào một unit nào đó, unit đó vẫn mất máu, tuy nhiên khi unit đó chưa hết bị đơ hay trói, dùng tiếp 1 trong 2 skill còn lại thì unit đó không mất máu :|
Nghĩa là một unit không nhận damage từ quá 1 skill cùng lúc. Trong khi trong dota, khi chơi wtf, tất cả skill ko có cooldown, cast Impale liên tục vẫn mất damage.

Đây gọi là impale system. dùng custom impale chứ k phải trong game nữa. Xem ở dưới. p/s: @Hunter, Leo: cái sound vẫn ko nghe thấy thành loop, để every x seconds thì nó bị ngắt quãng, làm thế nào để play 1 sound nào đó trong suốt cả game được mượt và nghe thấy trên toàn bản đồ?
 

Attachments

Cho mình hỏi một phát là cái item life steel (Mark Of Death) trong WE mình chuyển nó thành ability hero (tích true vào đó) cho hero học nhưng sao vào game khi click vào skill đó thì ko thấy icon đâu để mà học nữa, các bác nào pro chỉ mình cách làm item nó thành 1 skill bình thường dùm mình

vào chỉnh cái icon-research là đc
 
Cho mình hỏi cái này:
Một Hero mình cho 3 skill như thế này:
Một skill dựa trên Impale.
Một skill dựa trên Entanglingroots.
Một skill tạo dummy, cast Impale ra các phía xung quanh.
Các skill impale có airtime=0.01
Tất cả skill hoạt động bình thường. Khi cast các skill trên vào một unit nào đó, unit đó vẫn mất máu, tuy nhiên khi unit đó chưa hết bị đơ hay trói, dùng tiếp 1 trong 2 skill còn lại thì unit đó không mất máu :|
Nghĩa là một unit không nhận damage từ quá 1 skill cùng lúc. Trong khi trong dota, khi chơi wtf, tất cả skill ko có cooldown, cast Impale liên tục vẫn mất damage.

Dota sử dụng 1 hệ thống giả lập skill impale lại, map mình cũng vậy, cho nên trong dota, khi unit "bay" lên cao, nó k bị invu (war3 original impale thì invu) và thời gian "stun" trong dota, nó tính cả thời gian bay lên (còn war3 original impale, khi đáp đất mới bắt đầu tính stun). Và cái quan trọng nhất là, impale của war3 k thể multi-cast liên tục vào 1 unit (như vấn đề của bạn)
 
Stork[gm];22533354 nói:
Đây gọi là impale system. dùng custom impale chứ k phải trong game nữa. Xem ở dưới. p/s: @Hunter, Leo: cái sound vẫn ko nghe thấy thành loop, để every x seconds thì nó bị ngắt quãng, làm thế nào để play 1 sound nào đó trong suốt cả game được mượt và nghe thấy trên toàn bản đồ?

- Muốn nghe toàn bản đồ => bỏ chọn 3D sound
- Muốn sound lặp đi lặp lại => chọn Looping
Cái sound Monsoon đó nghe repeat liên tục cũng không được mượt lắm, cái này là do sound thôi, không thích thì import cái khác vào :-"
 
Nhìn cái đống System Impale thấy ngại quá :(

Bác nào có cách set damage cho skill kiểu như Shockwave không ?
 
^ Set dmg là như thế nào ?
F6 - Tìm ability => chỉnh dmg?
 
Mã:
library IceArrow initializer init requires xemissile, GroupUtils

globals 
  private constant integer SPELLID = 'A003'
  private constant real RADIUS = 750.
  private constant real OFFSET = 60.
  private constant real SPEED = 550.
  private constant real SCALE = 2.
  private constant real ARC = 0.25
  private constant string MISSILE = "Abilities\\Weapons\\LichMissile\\LichMissile.mdl"
  private player TempPlayer
endglobals

private function Damage takes unit caster returns real
  return I2R(GetUnitAbilityLevel(caster, SPELLID))/2*I2R(GetHeroInt(caster, true))
endfunction

struct IceArrow extends xemissile
  private unit u
  private integer level
  static method create takes unit u, integer level, real tx, real ty returns IceArrow
    local real x = GetUnitX(u)
    local real y = GetUnitY(u)
    local real z = GetUnitFlyHeight(u)+OFFSET
    local IceArrow this = IceArrow.allocate(x,y,z,tx,ty,0.0)
    
    set this.u = u
    set this.level = level
    set this.fxpath = MISSILE
    set this.scale = SCALE
    call this.launch(SPEED,ARC)
  return this
  endmethod
  
  static method targetEnum takes nothing returns boolean
    local boolean b=true
    local unit u = GetFilterUnit()
    set b=b and GetWidgetLife(u)>.405
    set b=b and IsUnitType(u,UNIT_TYPE_STRUCTURE)==false
    set b=b and IsUnitEnemy(u,TempPlayer)
    set u = null
    return b
  endmethod
  
  static method Damage takes nothing returns nothing
    local group g = NewGroup()
    local unit u
    set TempPlayer = GetOwningPlayer(.u)
    call GroupEnumUnitsInArea(g,.x,.y,RADIUS, Condition(function thistype.targetEnum))
    loop
      set u = FirstOfGroup(g)
      exitwhen u==null
      call UnitDamageTarget(.u,u,Damage(.u),true,true,ATTACK_TYPE_HERO,DAMAGE_TYPE_MAGIC,WEAPON_TYPE_WHOKNOWS)
      call GroupRemoveUnit(g,u)
      set u=null
    endloop
    call ReleaseGroup(g)
    set TempPlayer = null
    set g = null
    set u = null
  endmethod
endstruct

private function Check takes nothing returns boolean
  return GetSpellAbilityId()==SPELLID
endfunction

private function Effect takes nothing returns nothing
  local real tx = GetSpellTargetX()
  local real ty = GetSpellTargetY()
  local unit u = GetTriggerUnit()
  local integer level = GetUnitAbilityLevel(u,SPELLID)
  local IceArrow fb = IceArrow.create(u,level,tx,ty)
  set u = null
endfunction

private function init takes nothing returns nothing
  local trigger t = CreateTrigger()
  call TriggerRegisterAnyUnitEventBJ(t,EVENT_PLAYER_UNIT_SPELL_EFFECT)
  call TriggerAddCondition(t, Condition(function Check))
  call TriggerAddAction(t, function Effect)
  set t = null
endfunction

endlibrary

bác nào xem giúp e cái trigger này, lúc save nó báo lỗi:
Line 5993: Undeclared variable this
Line 5998: Too many arguments passed to function
Linh 5998: cannot convert nothing to real
 
Ability đó ko hiện button,bạn nên sử dụng một dummy skill để làm "giả" button cho nó.
làm như thế nào bạn chỉ mình dc ko nếu có map demo hay coretext thì càng tốt, sẵn tiện nếu ai chưa bík thì xem cho bik
 
làm như thế nào bạn chỉ mình dc ko nếu có map demo hay coretext thì càng tốt, sẵn tiện nếu ai chưa bík thì xem cho bik

Tức ability đó là của item => cho dù có add đủ kiểu nó cũng ko hiện button okay?
Giờ phải làm một skill giả, Lấy từ Storm Hammer hay bất cứ skill nào ko có tác dụng, add nó cho hero.Code vd thế này
Mã:
Melee Initialization
    Events
        Unit - A unit Learns a skill
    Conditions
        (Learned Hero Skill) Equal to Human Archmage - Blizzard
    Actions
        Unit - Add Item Life Steal to (Triggering unit)

Nhân tiện: ai MUI giúp mình spell này được ko? :)
http://www.mediafire.com/?kx496mv69tsvcuk

Quote quote :(
 
Ai cho mình hỏi cách viết trigger:

+ Đếm được số Hero (Còn Sống) của 1 Player
hoặc
+ Đếm được số Hero (còn sống) của 1 Group Player????

Ưu tiên cái thứ 2 hơn mọi ng nhé :). Thanks
 
Ai cho mình hỏi cách viết trigger:

+ Đếm được số Hero (Còn Sống) của 1 Player
hoặc
+ Đếm được số Hero (còn sống) của 1 Group Player????

Ưu tiên cái thứ 2 hơn mọi ng nhé :). Thanks

- 1 players:

Mã:
Trigger 1
    Events
    Conditions
    Actions
        Set HeroGroup = (Units owned by Player 1 (Red) matching ((((Matching unit) is A Hero) Equal to True) and (((Matching unit) is alive) Equal to True)))
        Set Count = (Number of units in HeroGroup)
        Custom script:   call DestroyGroup(udg_HeroGroup)

- Group Players:

Mã:
Trigger 2
    Events
    Conditions
    Actions
        Player Group - Pick every player in (All players) and do (Actions)
            Loop - Actions
                Set HeroGroup = (Units owned by (Picked player) matching ((((Matching unit) is A Hero) Equal to True) and (((Matching unit) is alive) Equal to True)))
                Set Count = (Number of units in HeroGroup)
                Custom script:   call DestroyGroup(udg_HeroGroup)

Trong đó biến Count là số hero còn sống
 
^ Set dmg là như thế nào ?
F6 - Tìm ability => chỉnh dmg?
Ý mình là set damage theo kiểu Agi, Strength cho Shockwave :)
Chưa biết làm thế nào set group dính damage cho nó cả ?
 
Ý mình là set damage theo kiểu Agi, Strength cho Shockwave :)
Chưa biết làm thế nào set group dính damage cho nó cả ?

Cái này bạn chỉ có thể tạo trigger skill Shockwave giả thôi. Làm dummy có model là shockwave rồi gây damage cho bọn xung quanh nó đấy.
 
Ai đó tạo dùm mình cái Trigger có nội dung dư này với :D

Đồng Minh thì k thể phá, giết unit của nhau.
Tất cả unit thuộc 1 Player thì k dc giết con Ghost. Nhưng con Ghost lại có thể đập dc những unit khác của Player đó
 
Ai đó tạo dùm mình cái Trigger có nội dung dư này với :D

Đồng Minh thì k thể phá, giết unit của nhau.
Tất cả unit thuộc 1 Player thì k dc giết con Ghost. Nhưng con Ghost lại có thể đập dc những unit khác của Player đó

Mã:
Melee Initialization
    Events
        Unit - A unit Is attacked
    Conditions
        ((Attacked unit) belongs to an ally of (Owner of (Attacking unit))) Equal to True
    Actions
        Unit - Order (Attacking unit) to Stop

Cho con ghost bất tử (Inlvunerable)?
 
Back
Top