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

Status
Không mở trả lời sau này.
Cách kiểm tra một skill đang cooldown và làm một skills passive có thể cooldown
 
sao dùng Order ID để dùng item đc, với lại ability vào item thì đâu dùng Order ID của nó nữa

trigger:
Hero - Use Item On A Unit
Hero - Use Item On A Point
Hero - Use Item On A Destructible
Hero - Use Item

tha hồ mà chọn =))

sợ item in slot 1, 2,... ko ổn thì dùng: Item Carried By Hero Of Type >:D<

Thanks a Tom. Nãy toàn tìm trong Action - Items mà quên k để ý đến mục Hero :D

@andy_bi
1. Thế thì làm ra làm cái gì cho phí công? Dù có ngu nó cũng phải biết đi farm, giết nhau, lên đồ, chạy khi yếu thế và dùng skill.

Lệnh Order Item On A Unit chỉ tác dụng khi có target. Với item no target như Arcane Boots thì vô dụng rồi.
 
Cách kiểm tra một skill đang cooldown và làm một skills passive có thể cooldown
Dùng jass: Issue<type>Order returns boolean
Nếu false có nghĩa skill bạn đã order:
- Ko tồn tại
- Đang bị silent
- Đang cooldown
Nếu true thì order stop là ko cast skill đó nữa

Skill passive mà có cooldown
Nếu ko MUI thì chỉ đơn giản là disable trigger của skill passive đó rồi dùng timer để hết time thì bật lại skill
Nếu MUI thì mình dùng wait/timer + boolean để lưu coi đã cooldown skill chưa (Trigger event unit generic)
Nếu MUI thì mình dùng wait/timer + disable/enable trigger (Trigger event unit specific)
 
Thanks a Tom. Nãy toàn tìm trong Action - Items mà quên k để ý đến mục Hero :D

@andy_bi
1. Thế thì làm ra làm cái gì cho phí công? Dù có ngu nó cũng phải biết đi farm, giết nhau, lên đồ, chạy khi yếu thế và dùng skill.

Lệnh Order Item On A Unit chỉ tác dụng khi có target. Với item no target như Arcane Boots thì vô dụng rồi.

bạn làm AI 1 mình bạn hay là nhiều ng
nếu 1 mình bạn thì mình khuyên nên... từ bỏ đi :))
vì... cái như bạn nói: biết farm, giết ng, chạy khi yếu thế,... tóm lại là... tá lả
IF làm mất 1 tháng hơn đấy bạn (kể từ khi ra bản gốc v6.74c, 1 tháng sau mới có AI :|), mà cũng chả biết có phải IF làm ko nữa (vì lúc đề tên là... PBMN - Please Bug Me Not) và AI... còn nhiều lúc bị lỗi nữa chứ (mắc cười, nhớ có ver của AI, bara dúng skill 1 xong invulable armor =)))
hãy suy nghĩ thật kĩ nhé bạn \m/, coi chừng mâdt nhiều thòi gian mà ko đc gì (như mình, đã... bỏ WE) :))
 
bạn làm AI 1 mình bạn hay là nhiều ng
nếu 1 mình bạn thì mình khuyên nên... từ bỏ đi :))
vì... cái như bạn nói: biết farm, giết ng, chạy khi yếu thế,... tóm lại là... tá lả
IF làm mất 1 tháng hơn đấy bạn (kể từ khi ra bản gốc v6.74c, 1 tháng sau mới có AI :|), mà cũng chả biết có phải IF làm ko nữa (vì lúc đề tên là... PBMN - Please Bug Me Not) và AI... còn nhiều lúc bị lỗi nữa chứ (mắc cười, nhớ có ver của AI, bara dúng skill 1 xong invulable armor =)))
hãy suy nghĩ thật kĩ nhé bạn \m/, coi chừng mâdt nhiều thòi gian mà ko đc gì (như mình, đã... bỏ WE) :))

hơi một tí là lôi IF vào, ghê vậy? :-o

không giúp thì thôi, ai cần vào bốc phét đâu?
 
bạn làm AI 1 mình bạn hay là nhiều ng
nếu 1 mình bạn thì mình khuyên nên... từ bỏ đi :))
vì... cái như bạn nói: biết farm, giết ng, chạy khi yếu thế,... tóm lại là... tá lả
IF làm mất 1 tháng hơn đấy bạn (kể từ khi ra bản gốc v6.74c, 1 tháng sau mới có AI :|), mà cũng chả biết có phải IF làm ko nữa (vì lúc đề tên là... PBMN - Please Bug Me Not) và AI... còn nhiều lúc bị lỗi nữa chứ (mắc cười, nhớ có ver của AI, bara dúng skill 1 xong invulable armor =)))
hãy suy nghĩ thật kĩ nhé bạn \m/, coi chừng mâdt nhiều thòi gian mà ko đc gì (như mình, đã... bỏ WE) :))

nói giảm cái gì thế. cái gì mà 1 mình bạn thì nghỉ đi. cái gì mà sũy nghĩ thật kĩ. làm cụt chí người ta à. bạn minhtronglam kìa. học tringger năm lớp 5. năm nay lớp 7. làm được AI. đấy. nếu là cao nhân GUI hoặc JAss thì hãy nói. còn không thì cứ học hỏi đi. còn dota sao lại 1 tháng sau mới có AI. thế những ver trước AI không có à. (còn bỏ WE thì bỏ đi việc gì phải rủ người ta. hay là làm không nổi rồi bỏ :)))
 
nói giảm cái gì thế. cái gì mà 1 mình bạn thì nghỉ đi. cái gì mà sũy nghĩ thật kĩ. làm cụt chí người ta à. bạn minhtronglam kìa. học tringger năm lớp 5. năm nay lớp 7. làm được AI. đấy. nếu là cao nhân GUI hoặc JAss thì hãy nói. còn không thì cứ học hỏi đi. còn dota sao lại 1 tháng sau mới có AI. thế những ver trước AI không có à. (còn bỏ WE thì bỏ đi việc gì phải rủ người ta. hay là làm không nổi rồi bỏ :)))

có hiểu ko? :-/
kể từ khi ra v6.74c, 1 tháng sau mới có v6.74c AI chứ ko phải là mấy ver trước ko có AI :-/
còn cái post ấy là chỉ khuyên, góp ý thôi chú ko có ý làm lung lay ý chí bạn ấy :)
 
@andy_bi

Tôi làm 1 mình và tôi có nỗ lực của riêng tôi. Tôi k đủ trình độ để làm đc AI khủng bố như Dota nên tôi làm theo quan điểm của tôi. Còn cái thứ lười nhác động tí là nản như cậu thì chả làm nên trò trống gì đâu. :)
 
Mình muốn làm 1 item hồi sinh nhưng ko mất nhưng có cooldown. Nhưng khi chết hs lại thì chỉ cần bỏ ra là cd tự reset. Có thể nào làm hero chết có thể bỏ ra nhưng khi nhặt hay mua cái khác nó vẫn cd không ?
Repost 3rd. Có ai giúp được k ? (K thì xin đừng rãnh rỗi spam)
 
có hiểu ko? :-/
kể từ khi ra v6.74c, 1 tháng sau mới có v6.74c AI chứ ko phải là mấy ver trước ko có AI :-/
còn cái post ấy là chỉ khuyên, góp ý thôi chú ko có ý làm lung lay ý chí bạn ấy :)

lại thích cãi nhau à. cứ cho là 6.74c mới có AI đi, vậy các ver trước AI IF nó xóa tringgfer đi làm lại à :s.
cứ ra ver mới là xóa tringger AI của ver cũ đi xong viết lại tringger mới để mất 1 tháng mới ra 6.74c AI à. cứ thích cãi cố nhỉ.

---------- Post added at 15:00 ---------- Previous post was at 14:59 ----------

có thể do bận bịu để phát triển các phiên bản tiếng khác. tiếng trung hoặc nga chẳng hạn. mất 1 tháng là con nhanh đấy. tưởng tượng viết lại toàn bộ tooptip. rồi nó bận công việc gì thì mặc bố nó. chứ đâu phải nó bỏ ra 1 tháng để phát triển AI
 
Ai xem hộ mình cái này sao mình pick every unit rồi gây damage không được =-=

Mã:
function Trig_Thoi_Son_Conditions takes nothing returns boolean
    if ( not ( GetSpellAbilityId() == 'A091' ) ) then
        return false
    endif
    return true
endfunction

function Group takes nothing returns boolean
    local unit uc = GetTriggerUnit()
    local unit up = GetFilterUnit()
    local real dmg = (80.00 * I2R(GetUnitAbilityLevelSwapped('A091', uc)))
    local location p = GetUnitLoc(up)
    if ( IsUnitType(up, UNIT_TYPE_STRUCTURE) == true ) and ( IsUnitAliveBJ(up) == true) and ( IsUnitEnemy(up, GetOwningPlayer(uc)) == true) and ( IsUnitType(up, UNIT_TYPE_MAGIC_IMMUNE) == false) then
    call UnitDamageTargetBJ( uc, up, dmg, ATTACK_TYPE_HERO, DAMAGE_TYPE_NORMAL )
    call AddSpecialEffectLocBJ( p , "Abilities\\Spells\\Other\\Doom\\DoomDeath.mdl" )
    call DestroyEffectBJ( GetLastCreatedEffectBJ() )
    call RemoveLocation (p)
    endif
    set uc = null
    set up = null
    set p = null
    return true
endfunction

function Trig_Thoi_Son_Actions takes nothing returns nothing
    local unit uc = GetTriggerUnit()
    local unit ut = GetSpellTargetUnit()
    call UnitAddAbility(ut,'A172')
    call TriggerSleepAction( ( 1 * I2R(GetUnitAbilityLevelSwapped('A091', uc)) ) )
    call UnitRemoveAbility(ut,'A172')
    set udg_TempLoc = GetUnitLoc(ut)
    set udg_TempGroup = GetUnitsInRangeOfLocAll (500,udg_TempLoc)
    call ForGroupBJ( udg_TempGroup, function Group )
    call DestroyGroup (udg_TempGroup)
    set uc = null
    set ut = null
endfunction

//===========================================================================
function InitTrig_Thoi_Son takes nothing returns nothing
    set gg_trg_Thoi_Son = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Thoi_Son, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition( gg_trg_Thoi_Son, Condition( function Trig_Thoi_Son_Conditions ) )
    call TriggerAddAction( gg_trg_Thoi_Son, function Trig_Thoi_Son_Actions )
endfunction
 
Ai xem hộ mình cái này sao mình pick every unit rồi gây damage không được =-=

Mã:
function Trig_Thoi_Son_Conditions takes nothing returns boolean
    if ( not ( GetSpellAbilityId() == 'A091' ) ) then
        return false
    endif
    return true
endfunction

function Group takes nothing returns boolean
    local unit uc = GetTriggerUnit()
    local unit up = [COLOR="#0000CD"]GetEnumUnit() //Picked Unit chứ không phải Matching Unit[/COLOR]
    local real dmg = (80.00 * I2R(GetUnitAbilityLevelSwapped('A091', uc)))
    local location p = GetUnitLoc(up)
    if ( IsUnitType(up, UNIT_TYPE_STRUCTURE) == true ) and ( IsUnitAliveBJ(up) == true) and ( IsUnitEnemy(up, GetOwningPlayer(uc)) == true) and ( IsUnitType(up, UNIT_TYPE_MAGIC_IMMUNE) == false) then
    call UnitDamageTargetBJ( uc, up, dmg, ATTACK_TYPE_HERO, DAMAGE_TYPE_NORMAL )
    call AddSpecialEffectLocBJ( p , "Abilities\\Spells\\Other\\Doom\\DoomDeath.mdl" )
    call DestroyEffectBJ( GetLastCreatedEffectBJ() )
    call RemoveLocation (p)
    endif
    set uc = null
    set up = null
    set p = null
    return true
endfunction

function Trig_Thoi_Son_Actions takes nothing returns nothing
    local unit uc = GetTriggerUnit()
    local unit ut = GetSpellTargetUnit()
    call UnitAddAbility(ut,'A172')
    call TriggerSleepAction( ( 1 * I2R(GetUnitAbilityLevelSwapped('A091', uc)) ) )
    call UnitRemoveAbility(ut,'A172')
    set udg_TempLoc = GetUnitLoc(ut)
    set udg_TempGroup = GetUnitsInRangeOfLocAll (500,udg_TempLoc)
    call ForGroupBJ( udg_TempGroup, function Group )
    call DestroyGroup (udg_TempGroup)
    set uc = null
    set ut = null
endfunction

//===========================================================================
function InitTrig_Thoi_Son takes nothing returns nothing
    set gg_trg_Thoi_Son = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Thoi_Son, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition( gg_trg_Thoi_Son, Condition( function Trig_Thoi_Son_Conditions ) )
    call TriggerAddAction( gg_trg_Thoi_Son, function Trig_Thoi_Son_Actions )
endfunction

function callback của ForGroup chính là cái "Loop - Actions", trong này phải dùng Picked Unit chứ sao lại dùng Matching Unit?
 
Cám ơn anh em mày mò làm thử nên còn nhiều cái nhầm lẫn,em còn đặt nhầm điều kiện picked unit là STRUCTURE nữa :">

P/s: vậy là mỗi lần dùng Loop - Actions như pick every unit .v.v. đều phải dùng một function riêng và gọi nó đúng không anh ?

Và em thắc mắc một điều là mỗi hàm trả cho ta một giá trị (ví dụ boolean trả là true hoặc false) thì cái giá trị đó để làm gì vậy anh ?
 
cho em hỏi cách kiểm tra Damage hiện tại của mình để từ đó deal damg, như map Thiên Kiếm là skill gây damg = 520% sát thương ..... ấy :D
 
Chỉnh sửa cuối:
Cám ơn anh em mày mò làm thử nên còn nhiều cái nhầm lẫn,em còn đặt nhầm điều kiện picked unit là STRUCTURE nữa :">

P/s: vậy là mỗi lần dùng Loop - Actions như pick every unit .v.v. đều phải dùng một function riêng và gọi nó đúng không anh ?

Và em thắc mắc một điều là mỗi hàm trả cho ta một giá trị (ví dụ boolean trả là true hoặc false) thì cái giá trị đó để làm gì vậy anh ?

- thật ra có thể lặp kiểu này:

Mã:
function Trig_Thoi_Son_Conditions takes nothing returns boolean
    if ( not ( GetSpellAbilityId() == 'A091' ) ) then
        return false
    endif
    return true
endfunction

function Trig_Thoi_Son_Actions takes nothing returns nothing
    local unit uc = GetTriggerUnit()
    local unit ut = GetSpellTargetUnit()
	local unit up
	local location p
    call UnitAddAbility(ut,'A172')
    call TriggerSleepAction( ( 1 * I2R(GetUnitAbilityLevelSwapped('A091', uc)) ) )
    call UnitRemoveAbility(ut,'A172')
    set udg_TempLoc = GetUnitLoc(ut)
    set udg_TempGroup = GetUnitsInRangeOfLocAll (500,udg_TempLoc)
	loop
		set up = FirstOfGroup( udg_TempGroup )
		exitwhen up==null
		call GroupRemoveUnit( udg_TempGroup, up)
		if ( IsUnitType(up, UNIT_TYPE_STRUCTURE) == true ) and ( IsUnitAliveBJ(up) == true) and ( IsUnitEnemy(up, GetOwningPlayer(uc)) == true) and ( IsUnitType(up, UNIT_TYPE_MAGIC_IMMUNE) == false) then
			set p = GetUnitLoc(up)
			call UnitDamageTargetBJ( uc, up, dmg, ATTACK_TYPE_HERO, DAMAGE_TYPE_NORMAL )
			call AddSpecialEffectLocBJ( p , "Abilities\\Spells\\Other\\Doom\\DoomDeath.mdl" )
			call DestroyEffectBJ( GetLastCreatedEffectBJ() )
			call RemoveLocation (p)
			set p = null
		endif
	endloop
    call DestroyGroup (udg_TempGroup)
    set uc = null
    set ut = null
endfunction

//===========================================================================
function InitTrig_Thoi_Son takes nothing returns nothing
    set gg_trg_Thoi_Son = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Thoi_Son, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition( gg_trg_Thoi_Son, Condition( function Trig_Thoi_Son_Conditions ) )
    call TriggerAddAction( gg_trg_Thoi_Son, function Trig_Thoi_Son_Actions )
endfunction

- cái này còn tùy hàm, ví dụ:
IssueTargetOrderBJ là hàm lệnh cho một unit thực hiện order vào một mục tiêu, hàm này trả về true nếu order có thể thực hiện, false nếu không thể.
 
Anh Tom-sama này cho em hỏi há
mình trong Jass mà tận dụng các biến real x,y của một unit hay location (mà ko dụng GetLocationX(typelocation) và GetLocationY(typelocation)) thì sẽ đỡ chiếm leak hơn là xài trực típ location hả anh? :cuteonion27: (vì thấy đỡ phải remove :-* )

p.s thank anh :-*
 
Chỉnh sửa cuối:
Anh Tom-sama này cho em hỏi há
mình trong Jass mà tận dụng các biến real x,y của một unit hay location (mà ko dụng GetLocationX(typelocation) và GetLocationY(typelocation)) thì sẽ đỡ chiếm leak hơn là xài trực típ location hả anh? :cuteonion27: (vì thấy đỡ phải remove :-* )

đơn giản là: real không leak, location là một "handle", không remove thì leak, vậy thôi
ngoài ra: tạo location, dùng, xóa -> dùng real thì đỡ đc vụ "tạo + xóa".
 
cho mình hỏi làm sao sau khi cast skill, tất cả những gì trong một AoE nhất định đều bị slow?? kể cả missle,...
 
cho mình hỏi làm sao sau khi cast skill, tất cả những gì trong một AoE nhất định đều bị slow?? kể cả missle,...

Không có cách. Trừ khi "trigger" hết tất cả các missile có trong map, từ missile được tạo ra khi attack, missile được tạo ra từ spells (các missiles này sẽ là những dummy units).
Nếu giỏi Jass có thể dùng system này: System - Projectile
 
Dùng jass: Issue<type>Order returns boolean
Nếu false có nghĩa skill bạn đã order:
- Ko tồn tại
- Đang bị silent
- Đang cooldown
Nếu true thì order stop là ko cast skill đó nữa

Skill passive mà có cooldown
Nếu ko MUI thì chỉ đơn giản là disable trigger của skill passive đó rồi dùng timer để hết time thì bật lại skill
Nếu MUI thì mình dùng wait/timer + boolean để lưu coi đã cooldown skill chưa (Trigger event unit generic)
Nếu MUI thì mình dùng wait/timer + disable/enable trigger (Trigger event unit specific)

ý tớ không phải cái này. Bạn biết skil 3 của kiến trong dota chứ? Mình muốn hỏi cách làm cooldown như vậy.
 
Status
Không mở trả lời sau này.
Back
Top