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

K ý thế này, Unit là Hero khi dùng 1 skill thì khóa Button Move của nó 1 thời gian, khi xong skill thì trả lại Button Move cho nó

Theo tui biết thì ko có rồi :|~
Ko thì pause nó cũng đc :|, hay giảm ms, chứ cần gì phải remove button :|
 
Chỉnh sửa cuối:
Sao cái JNG của em cứ có trigger bằng jass là khi test toàn văng ra ngoài nhỉ? Ai giúp em với...
 
Sao cái JNG của em cứ có trigger bằng jass là khi test toàn văng ra ngoài nhỉ? Ai giúp em với...

Trước khi test thì save một lần,nhìn trên cửa sổ JNG góc bên phải trên cùng có dấu * thì cứ phải save lại mới test được
 
Cho minh hỏi làm cach nào để điều chỉnh chỉ số ãm cho skill
ví du: gần giống skill passive của necrolyte (ten gì đó quên rồi) nhưng mình muốn kẻ thù đứng gần hero sẽ bị giảm HP regen, mình thử skill 3 (passvie) của Dark knight tên Unholy Aura mỉnh điều chỉnh nó xuống chỉ số âm và enter thì nó trở về số 0 có ai bik cách làm khong chỉ mình. mình cần khẩn cấp lắm
 
@Daric: bài đó e đọc hơn chục lần rùi mà vẫn chưa thấm :8cool_cry:

bác xem giúp e cái này
Mã:
library Myboard initializer Init requires Multiboard

function create takes integer columnCount, integer rowCount returns nothing
  local Multiboard mb = Multiboard.create(1,1)
  set mb.which = CreateMultiboard()
  set mb.columnCount = 4
  set mb.rowCount = 13
  call MultiboardSetColumnCount(mb.which, mb.columnCount)
  call MultiboardSetRowCount(mb.which, mb.rowCount)
  call mb.clear()
  call MultiboardDisplay(mb.which, flag)
endfunction

function Init takes nothing returns nothing
  local trigger t 
  set t = CreateTrigger()
  call TriggerRegisterTimerEventSingle(t, 1.)
  call TriggerAddAction(t, function create)
endfunction

endlibrary

nó báo lỗi: Line 1625: Multiboard.which is private

còn phần effect hình rẽ quạt bác giúp e lun đc hk
 
Cho minh hỏi làm cach nào để điều chỉnh chỉ số ãm cho skill
ví du: gần giống skill passive của necrolyte (ten gì đó quên rồi) nhưng mình muốn kẻ thù đứng gần hero sẽ bị giảm HP regen, mình thử skill 3 (passvie) của Dark knight tên Unholy Aura mỉnh điều chỉnh nó xuống chỉ số âm và enter thì nó trở về số 0 có ai bik cách làm khong chỉ mình. mình cần khẩn cấp lắm

Select chỗ cần edit, sau đó bạn giữ chặt Shift, nhấn Enter là dc, sau đó điền số âm vào.
 
@Daric: bài đó e đọc hơn chục lần rùi mà vẫn chưa thấm :8cool_cry:

bác xem giúp e cái này
Mã:
library Myboard initializer Init requires Multiboard

function create takes integer columnCount, integer rowCount returns nothing
  local Multiboard mb = Multiboard.create(1,1)
  [COLOR="#FF0000"]set mb.which = CreateMultiboard()[/COLOR][COLOR="#0000FF"]
  set mb.columnCount = 4
  set mb.rowCount = 13
  call MultiboardSetColumnCount(mb.which, mb.columnCount)
  call MultiboardSetRowCount(mb.which, mb.rowCount)[/COLOR]
  [COLOR="#008080"]call mb.clear()[/COLOR][COLOR="#0000FF"]
  call MultiboardDisplay(mb.which, flag)[/COLOR]
endfunction

function Init takes nothing returns nothing
  local trigger t 
  set t = CreateTrigger()
  call TriggerRegisterTimerEventSingle(t, 1.)
  call TriggerAddAction(t, function create)
endfunction

endlibrary

nó báo lỗi: Line 1625: Multiboard.which is private

còn phần effect hình rẽ quạt bác giúp e lun đc hk

:5cool_ops:

xóa cái đấy đi...

mấy cái màu xanh sai lệnh rồi
màu tía thì là đặt sai chỗ, để phía dưới hàm .create ấy.
Đồng thời sửa tên function create lại, trùng struct kìa
 
Chỉnh sửa cuối:
cho mình hỏi về bj_lastCreatedXXX

có phải nó chỉ thực ra như là 1 biến có từ khởi tạo :-? và nếu cái XXX đó đã tạo từ rất lâu rồi, sau này có nhìu dạng XXX khác, vậy nếu mình
set bj_lastCreatedXXX = XXX, thì có được k
 
cho mình hỏi về bj_lastCreatedXXX

có phải nó chỉ thực ra như là 1 biến có từ khởi tạo :-? và nếu cái XXX đó đã tạo từ rất lâu rồi, sau này có nhìu dạng XXX khác, vậy nếu mình
set bj_lastCreatedXXX = XXX, thì có được k

nó chính là một biến để lưu các giá trị,bạn có thể lưu bj_lastCreatedUnit = CreateUnit(...),GetSpellAbilityUnit()...,nhưng bạn hỏi "và nếu cái XXX đó đã tạo từ rất lâu rồi, sau này có nhìu dạng XXX khác" là muốn hỏi về cái gì ?
 
Chỉnh sửa cuối:
mình biết bj_lastCreatedUnit là nó tạo unit trong 1 function mẫu, và sau đó nó gán bj_lastCreatedUnit bằng unit đó

ý mình hỏi là: nếu mình đã tạo unit A, unit B, unit C, vậy thì lúc này bj_lastCreatedUnit là C
nhưng nếu mình "set bj_lastCreatedUnit = A", vậy thì có bị gì k 8-}? hay đơn giản, bj_lastCreatedUnit cũng chỉ là 1 biến
 
mình biết bj_lastCreatedUnit là nó tạo unit trong 1 function mẫu, và sau đó nó gán bj_lastCreatedUnit bằng unit đó

ý mình hỏi là: nếu mình đã tạo unit A, unit B, unit C, vậy thì lúc này bj_lastCreatedUnit là C
nhưng nếu mình "set bj_lastCreatedUnit = A", vậy thì có bị gì k 8-}? hay đơn giản, bj_lastCreatedUnit cũng chỉ là 1 biến

đúng, nó chỉ là một biến global, nó sẽ mang giá trị được gán cho nó sau cùng
 
anh TOM cho em hỏi về lỗi này, em sử dụng Multiboard Decorator giống của a, mà k hiểu sao lại lỗi cái này

1dasd.png
 
cho e hỏi cái này: trong hàm này

function SpellDamage takes integer level returns real
returns I2R(level)*2
endfunction

cái level là level của Spell cast, còn muốn lấy giá trị stat (agi, str, int) của hero thì làm sao?
 
cho e hỏi cái này: trong hàm này

function SpellDamage takes integer level returns real
returns I2R(level)*2
endfunction

cái level là level của Spell cast, còn muốn lấy giá trị stat (agi, str, int) của hero thì làm sao?

GetHeroStr(Unit,bao gồm chỉ số xanh hay không(false là ko,true là có))
GetHeroAgi
GetHeroInt
 
Mình dùng vẫn ổn mà,bạn thử post code của bạn lên đây xem
m` lấy từ cái spell lúc bạn làm cho m` á

Mã:
library Spell initializer init requires TimerUtils,GroupUtils
   globals
      private integer     SpellId       ='A000'
      private real        SpellAoe      =400
      private real        SpellSpeed    =0.1
      private real        SpellDur      =1
      private real array  SpellDamage
      private string      SpellSfx      ="Abilities\\Spells\\Undead\\FrostNova\\FrostNovaTarget.mdl"
      private player      TempPlayer
   endglobals
   private function GetSpellDamage takes integer level returns real
      return I2R(level)*2
   endfunction
   struct Spell
      unit u
      real x
      real y
      real tik
      integer level
      method stop takes nothing returns nothing
         set.u=null
         call.destroy()
      endmethod
      method Effect takes nothing returns nothing
         local real x
         local real y
         local real r=GetRandomReal(0,SpellAoe)
         set x=.x+r*Cos(r*bj_DEGTORAD)
         set y=.y+r*Sin(r*bj_DEGTORAD)
         call DestroyEffect(AddSpecialEffect(SpellSfx,x,y))
      endmethod
      static method Check 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
      method Damage takes nothing returns nothing
         local group g=NewGroup()
         local unit u
         set TempPlayer=GetOwningPlayer(.u)
         call GroupEnumUnitsInArea(g,.x,.y,SpellAoe,Condition(function thistype.Check))
         loop
            set u=FirstOfGroup(g)
            exitwhen u==null
            call UnitDamageTarget(.u,u,GetSpellDamage(.level),true,true,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
            call GroupRemoveUnit(g,u)
            set u=null
         endloop
         call ReleaseGroup(g)
         set TempPlayer=null
         set g=null
         set u=null
      endmethod
      static method Loop takes nothing returns nothing
         local timer ti=GetExpiredTimer()
         local thistype this=GetTimerData(ti)
         set.tik=.tik-1
         if.tik<=0then
            call ReleaseTimer(ti)
            call.stop()
         else
            call.Effect() 
            call.Damage()
         endif
         set ti=null
      endmethod      
      static method Create takes unit u,real x,real y returns thistype
         local thistype this=thistype.allocate()
         local timer ti=NewTimer()
         set.u=u
         set.x=x
         set.y=y
         set.level=GetUnitAbilityLevel(.u,SpellId)
         set.tik=SpellDur/SpellSpeed
         call SetTimerData(ti,this)
         call TimerStart(ti,SpellSpeed,true,function thistype.Loop)
         set ti=null
         return this
      endmethod
   endstruct
   private function Cd takes nothing returns boolean
      if GetSpellAbilityId()==SpellId then
         call Spell.Create(GetSpellAbilityUnit(),GetSpellTargetX(),GetSpellTargetY())
      endif
      return false
   endfunction   
   private function init takes nothing returns nothing
      local integer i=0
      local trigger t=CreateTrigger()
      loop
         if GetPlayerSlotState(Player(i))==PLAYER_SLOT_STATE_PLAYING then
            call TriggerRegisterPlayerUnitEvent(t,Player(i),EVENT_PLAYER_UNIT_SPELL_EFFECT,null)
         endif
         set i=i+1
         exitwhen i==bj_MAX_PLAYER_SLOTS
      endloop
      call TriggerAddCondition(t,function Cd)
      set t=null
   endfunction
endlibrary
 
m` lấy từ cái spell lúc bạn làm cho m` á

Mã:
library Spell initializer init requires TimerUtils,GroupUtils
   globals
      private integer     SpellId       ='A000'
      private real        SpellAoe      =400
      private real        SpellSpeed    =0.1
      private real        SpellDur      =1
      private real array  SpellDamage
      private string      SpellSfx      ="Abilities\\Spells\\Undead\\FrostNova\\FrostNovaTarget.mdl"
      private player      TempPlayer
   endglobals
   private function GetSpellDamage takes integer level returns real
      return I2R(level)*2
   endfunction
   struct Spell
      unit u
      real x
      real y
      real tik
      integer level
      method stop takes nothing returns nothing
         set.u=null
         call.destroy()
      endmethod
      method Effect takes nothing returns nothing
         local real x
         local real y
         local real r=GetRandomReal(0,SpellAoe)
         set x=.x+r*Cos(r*bj_DEGTORAD)
         set y=.y+r*Sin(r*bj_DEGTORAD)
         call DestroyEffect(AddSpecialEffect(SpellSfx,x,y))
      endmethod
      static method Check 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
      method Damage takes nothing returns nothing
         local group g=NewGroup()
         local unit u
         set TempPlayer=GetOwningPlayer(.u)
         call GroupEnumUnitsInArea(g,.x,.y,SpellAoe,Condition(function thistype.Check))
         loop
            set u=FirstOfGroup(g)
            exitwhen u==null
            call UnitDamageTarget(.u,u,GetSpellDamage(.level),true,true,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
            call GroupRemoveUnit(g,u)
            set u=null
         endloop
         call ReleaseGroup(g)
         set TempPlayer=null
         set g=null
         set u=null
      endmethod
      static method Loop takes nothing returns nothing
         local timer ti=GetExpiredTimer()
         local thistype this=GetTimerData(ti)
         set.tik=.tik-1
         if.tik<=0then
            call ReleaseTimer(ti)
            call.stop()
         else
            call.Effect() 
            call.Damage()
         endif
         set ti=null
      endmethod      
      static method Create takes unit u,real x,real y returns thistype
         local thistype this=thistype.allocate()
         local timer ti=NewTimer()
         set.u=u
         set.x=x
         set.y=y
         set.level=GetUnitAbilityLevel(.u,SpellId)
         set.tik=SpellDur/SpellSpeed
         call SetTimerData(ti,this)
         call TimerStart(ti,SpellSpeed,true,function thistype.Loop)
         set ti=null
         return this
      endmethod
   endstruct
   private function Cd takes nothing returns boolean
      if GetSpellAbilityId()==SpellId then
         call Spell.Create(GetSpellAbilityUnit(),GetSpellTargetX(),GetSpellTargetY())
      endif
      return false
   endfunction   
   private function init takes nothing returns nothing
      local integer i=0
      local trigger t=CreateTrigger()
      loop
         if GetPlayerSlotState(Player(i))==PLAYER_SLOT_STATE_PLAYING then
            call TriggerRegisterPlayerUnitEvent(t,Player(i),EVENT_PLAYER_UNIT_SPELL_EFFECT,null)
         endif
         set i=i+1
         exitwhen i==bj_MAX_PLAYER_SLOTS
      endloop
      call TriggerAddCondition(t,function Cd)
      set t=null
   endfunction
endlibrary

Mình đâu có thấy đoạn code bạn dùng GetHeroStr,Agi,Int ???
 
Back
Top