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

Status
Không mở trả lời sau này.
condition "(Local player)" lấy ở đâu ra vậy?

"nhiễm" thì cũng "nhiễm" cho đúng chứ =))
 
condition "(Local player)" lấy ở đâu ra vậy?

"nhiễm" thì cũng "nhiễm" cho đúng chứ =))

"(Local player)" cái này xuất hiện trong UMWSE và EGUi thì phải, em đang dùng cái này :-j nó như mã jass get localplayer
 
cho mình hỏi 1 câu: sau khi đã làm cho quân spawn ở 1 region nào đó, đặt 1 building gần đấy rồi vào game phá hủy building thì quân sẽ ko spawn nữa thì làm thế nào?
 
cho mình hỏi 1 câu: sau khi làm cho quân tự spawn ở 1 region nào đó, đặt 1 building bên cạnh rồi vào game cứ phá hủy building đó là quân ko spawn nưa thì làm the nào?
 
cho bjn hỏi cái này cái. Trong 2 trigger này có cái này lỗi or leak or. .... mà sao khi vào dùng skill khoảng 2-3 lần là lag không thấy mặt trời lun @@ (2 cái khác nhau không liên quan, 1 cái là 1 skill )
Trigger 1:
Mã:
Light Death
    Events
        Unit - A unit Starts the effect of an ability
    Conditions
        (Ability being cast) Equal to Light Death 
    Actions
        For each (Integer A) from 1 to 10, do (Actions)
            Loop - Actions
                Set Caster[16] = (Triggering unit)
                Set Points[16] = ((Position of Caster[16]) offset by 200.00 towards ((Real((Integer A))) x 36.00) degrees)
                Special Effect - Destroy (Create a special effect using Abilities\Spells\Human\HolyBolt\HolyBoltSpecialArt.mdl at Points[16])
                Set UnitGroups[16] = (Units within 100.00 of Points[16] matching ((((Matching unit) belongs to an enemy of (Owner of (Triggering unit))) Equal to True) and (((Matching unit) is alive) Equal to True)))
                Unit Group - Pick every unit in UnitGroups[16] and do (Actions)
                    Loop - Actions
                        Unit - Cause (Triggering unit) to damage (Picked unit), dealing ((100.00 + (100.00 x (Real((Level of Light Death  for (Triggering unit)))))) + (2.00 x (Real((Strength of (Triggering unit) (Include bonuses)))))) damage of attack type Spells and damage type Normal
                Custom script:   call DestroyGroup(udg_UnitGroups[16])
                Custom script:   call RemoveLocation(udg_Points[16])
Trigger 2:
Mã:
scope FireMassing initializer init
//>>>>>>>>>>>>>>>>>>>>>>>>>SETUP<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<//
globals
    private constant integer SPELL_ID = 'A01P'
    private constant integer DUMMY_UNIT_ID = 'e008'
    private constant integer EFF_UNIT_ID = 'e007'
    private constant string EFF = "Abilities\\Spells\\Other\\BreathOfFire\\BreathOfFireDamage.mdl"
                                //"Abilities\\Weapons\\Rifle\\RifleImpact.mdl"
                                //"Abilities\\Spells\\Human\\SpellSteal\\SpellStealMissile.mdl"
                                //"Abilities\\Spells\\Other\\BreathOfFire\\BreathOfFireDamage.mdl"
                                //"Abilities\\Spells\\Other\\Doom\\DoomDeath.mdl"
    
endglobals
//Advance:
private function speed takes nothing returns real
    return 0.01 //lager value, more slower
endfunction

private function range takes nothing returns real
    return 1500.00 
endfunction

private function radius takes nothing returns real
    return 100.00 //the radius for detecting collision
endfunction

private function amount takes nothing returns integer
    return 10 //the numbers of arrow per cast
endfunction

private function dam takes integer aLevel returns real
    return ( ( 300.00 + ( 100.00 * aLevel ) ) + ( 3.00 * I2R(GetHeroStatBJ(bj_HEROSTAT_STR, GetTriggerUnit(), true)) ) )
endfunction

private function addOn takes unit trigUnit, unit dam2Unit returns nothing
    //this option is for advance user, you can add your code here to Make
    //more effect when the projectile impact to enemy. ex: knock back, dam over time...
endfunction

//>>>>>>>>>>>>>>>>>>>>>>>ENDSETUP<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<//

//=================Confuse zone==============//
//Dont edit this bunk of code unless you
//really wanna do
//===========================================//
globals
    private constant real MOVE = 10.0 //distance that the projectile will move Per
                                      //*speed()* . You should'nt change this
    private constant real deviation = 10.0 //deviation between projectile
endglobals




private struct Projectile
    unit u//projectile
    unit uT// trigger unit
    real angle
    real moved = 0
    
    boolean stop = false
    
    method control takes nothing returns nothing
        local location moveLoc = PolarProjectionBJ(GetUnitLoc(.u), MOVE, .angle)
        //valriable for collision detect:
        local group cGrp = GetUnitsInRangeOfLocAll(radius(),moveLoc)
        local unit uDam
        
        //move the unit(projectile)
        call SetUnitPositionLoc(.u,moveLoc)
        
        //collision detect and dam enemy:
        set uDam = FirstOfGroup(cGrp)
        if uDam != null then
        
            loop
                exitwhen uDam == null
                if IsUnitEnemy(uDam,GetOwningPlayer(.uT)) and IsUnitAliveBJ(uDam) then 
                    
                    call UnitDamageTargetBJ(.uT, uDam, dam(GetUnitAbilityLevel(.uT,SPELL_ID)),ATTACK_TYPE_MAGIC,DAMAGE_TYPE_MAGIC)
                    call addOn(.uT,uDam)
                    set .stop = true//need improve
                endif
                
                call GroupRemoveUnit(cGrp,uDam)
                
                set uDam = FirstOfGroup(cGrp)
            endloop
            
            
        endif
        
        
        //out of range detect:
        if .moved < range() then
            set .moved = .moved + MOVE//if still in range, then set the .moved value go up
        else 
            set .stop = true
        endif
        
        //play animation
        if .stop then
            call DestroyEffect(AddSpecialEffectLoc(EFF,moveLoc))
        endif
        
        //remove leak
        call RemoveLocation(moveLoc)
        call DestroyGroup(cGrp)
        set moveLoc = null
        set cGrp = null
        set uDam = null
    endmethod
    
    
endstruct

globals
    private integer Total = 0
    private timer T = CreateTimer()
    private Projectile array pArr
endglobals

                                  

private function timerLoop takes nothing returns nothing
    local integer i = 0
    loop
        exitwhen(i >= Total)
     
        if pArr[i].stop then
            call KillUnit(pArr[i].u)//kill the projectile to not display it any more
            call pArr[i].destroy()//Not need this instance any more
            set Total=Total-1//degrease the Total by 1
            if Total > 0 then
                set pArr[i]=pArr[Total]
                set i=i-1//if not the loops will forget to handle the pArr[Total] ^^
            else
                call PauseTimer(T)
            endif
        else
            call pArr[i].control()
        endif
        
    
        set i = i + 1
    endloop
 
    //call BJDebugMsg("yeah")
endfunction

//extra function for formula caculate:
private function angleCalculate takes real angle, integer iAddOne returns real
    local real result = 0
    //==========for div number of *amount()*:
    local real halfDev //deviation / 2
    local real cen1
    local real cen2
    local integer cen1Index
    local integer cen2Index
    //==========for odd number of *amount()*:
    local integer cenIndex
    local real cen
    
    //div:
    if ModuloInteger(amount(),2)==0 then
        //call BJDebugMsg("so chan")
        set halfDev = deviation/2
        set cen1 = angle - halfDev
        set cen2 = angle + halfDev
        set cen1Index = amount()/2
        set cen2Index = cen1Index + 1
        
        if iAddOne == cen1Index then
            set result = cen1
        elseif iAddOne < cen1Index then
            set result = cen1 - deviation*(cen1Index - iAddOne)
        elseif iAddOne == cen2Index then
            set result = cen2
        elseif iAddOne > cen2Index then
            set result = cen2 + deviation*(iAddOne - cen2Index)
        endif
        
        
    //odd:    
    else
        //call BJDebugMsg("so le")
        set cen = angle
        set cenIndex = ((amount() - 1)/2) + 1
        
        if iAddOne == cenIndex then
            set result = angle
        elseif iAddOne > cenIndex then
            set result = cen - (deviation*(iAddOne - cenIndex))
        else
            set result = cen + (deviation*(cenIndex - iAddOne))
        endif
    endif
    
    return result
endfunction

//====================end=====================//


//Condition================================================================
private function condition takes nothing returns boolean
    return GetSpellAbilityId() == SPELL_ID
endfunction

//Actions==================================================================


private function Actions takes nothing returns nothing
    local player pT =  GetOwningPlayer(GetTriggerUnit())
    local location tar = GetSpellTargetLoc()
    local location self = GetUnitLoc(GetTriggerUnit())
    local real deg = AngleBetweenPoints(self,tar)
    local Projectile p
    //
    local integer iPlus = 1
    

    
    if Total == 0 then
        call TimerStart (T, speed(), true, function timerLoop)
    endif
   
    //
    loop
    exitwhen iPlus > amount()
        set p = Projectile.create()
        set p.u = CreateUnitAtLoc(pT,EFF_UNIT_ID,self,angleCalculate(deg,iPlus))
        set p.angle = angleCalculate(deg,iPlus)
        set p.uT = GetTriggerUnit()
        
        //call BJDebugMsg(R2S(angleCalculate(deg,iPlus)))
        //call BJDebugMsg(I2S(Total))
        
        set pArr[Total] = p
        set Total = Total + 1
    
        set iPlus = iPlus + 1
    endloop
    
    //remove leak
    set pT = null
    call RemoveLocation(tar)
    call RemoveLocation(self)
    set tar = null
    set self = null
 
endfunction

//Initializer==============================================================
private function init takes nothing returns nothing
    local trigger t = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( t, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddAction( t, function Actions )
    call TriggerAddCondition(t,Condition(function condition))
endfunction

endscope
 
condition "(Local player)" lấy ở đâu ra vậy?

"nhiễm" thì cũng "nhiễm" cho đúng chứ

UMSWE cậu ạ!
Còn đối với Trigger thứ nhất của DylandKyo thì Set Variable unit đến 10 lần liên tiếp,như vậy sẽ rất lag,nên dời giá trị đó ra ngoài vùng loop!
 
UMSWE nó có chạy được với patch mới đâu mà cố xài cho nó lỗi ra o.O
 
Ai làm spell khi cast đối tượng thì hero chạy tới đối tượng tấn công đối tượng đã cast ? Thanks nhìu
 
Mã:
Leap of Death
    Events
        Unit - A unit Starts the effect of an ability
    Conditions
        (Ability being cast) Equal to Leap of Death 
    Actions
        Set Caster[20] = (Triggering unit)
        Set Points[20] = (Target point of ability being cast)
        Set Dame[9] = ((400.00 + (100.00 x (Real((Level of Leap of Death  for Caster[20]))))) + (3.50 x (Real((Strength of Caster[20] (Include bonuses))))))
        Unit - Create 1 Dummy for (Owner of Caster[20]) at Points[20] facing Default building facing degrees
        Unit - Add a 1.00 second Generic expiration timer to (Last created unit)
        Unit - Move Caster[20] instantly to Points[20]
        EGUI Effect - Create a ring of effects at Points[20] with a radius of 300.00 using 6 effects using the model Objects\Spawnmodels\Undead\UndeadDissipate\UndeadDissipate.mdl that lasts for 2.00 seconds
        EGUI Leak - Destroy (Last created special effect)
        EGUI Effect - Create an effect at Points[20] using the model Objects\Spawnmodels\Other\NeutralBuildingExplosion\NeutralBuildingExplosion.mdl that lasts for 2.00 seconds
        Set UnitGroups[20] = (Units within (150.00 x (Real((Level of (Ability being cast) for Caster[15])))) of Points[20] matching (((((Matching unit) is alive) Equal to True) and (((Matching unit) is in K_Group[2]) Equal to False)) and (((Owner of (Matching unit)) is an enemy of (Owner
        Unit Group - Pick every unit in UnitGroups[20] and do (Actions)
            Loop - Actions
                Unit - Cause Caster[20] to damage (Picked unit), dealing Dame[9] damage of attack type Chaos and damage type Universal
                Camera - Shake the camera for (Owner of (Picked unit)) with magnitude 3.00
                Camera - Sway the camera target for (Owner of (Picked unit)) with magnitude 20.00 and velocity 5.00
                Unit Group - Add (Picked unit) to K_Group[2]
        EGUI Leak - Remove Points[20]
        EGUI Leak - Destroy UnitGroups[20]
        Set Caster[20] = No unit
cho bjn hỏi ở trigger trên có sai chỗ nào? mà sao khi cast spell thì không gây ra dame, và k có cooldown @@ (do skill này tự làm 100% nên mới bị nhìu lỗi @@)
 
Mã:
Leap of Death
    Events
        Unit - A unit Starts the effect of an ability
    Conditions
        (Ability being cast) Equal to Leap of Death 
    Actions
        Set Caster[20] = (Triggering unit)
        Set Points[20] = (Target point of ability being cast)
        Set Dame[9] = ((400.00 + (100.00 x (Real((Level of Leap of Death  for Caster[20]))))) + (3.50 x (Real((Strength of Caster[20] (Include bonuses))))))
        Unit - Create 1 Dummy for (Owner of Caster[20]) at Points[20] facing Default building facing degrees
        Unit - Add a 1.00 second Generic expiration timer to (Last created unit)
        Unit - Move Caster[20] instantly to Points[20]
        EGUI Effect - Create a ring of effects at Points[20] with a radius of 300.00 using 6 effects using the model Objects\Spawnmodels\Undead\UndeadDissipate\UndeadDissipate.mdl that lasts for 2.00 seconds
        EGUI Leak - Destroy (Last created special effect)
        EGUI Effect - Create an effect at Points[20] using the model Objects\Spawnmodels\Other\NeutralBuildingExplosion\NeutralBuildingExplosion.mdl that lasts for 2.00 seconds
        Set UnitGroups[20] = (Units within (150.00 x (Real((Level of (Ability being cast) for Caster[15])))) of Points[20] matching (((((Matching unit) is alive) Equal to True) and (((Matching unit) is in K_Group[2]) Equal to False)) and (((Owner of (Matching unit)) is an enemy of (Owner
        Unit Group - Pick every unit in UnitGroups[20] and do (Actions)
            Loop - Actions
                Unit - Cause Caster[20] to damage (Picked unit), dealing Dame[9] damage of attack type Chaos and damage type Universal
                Camera - Shake the camera for (Owner of (Picked unit)) with magnitude 3.00
                Camera - Sway the camera target for (Owner of (Picked unit)) with magnitude 20.00 and velocity 5.00
                Unit Group - Add (Picked unit) to K_Group[2]
        EGUI Leak - Remove Points[20]
        EGUI Leak - Destroy UnitGroups[20]
        Set Caster[20] = No unit
cho bjn hỏi ở trigger trên có sai chỗ nào? mà sao khi cast spell thì không gây ra dame, và k có cooldown @@ (do skill này tự làm 100% nên mới bị nhìu lỗi @@)

Bạn đã đưa ra điều kiện như vậy,mình xin hỏi K_Group array trong điều kiện của UnitGroup[20] là gì thế?Khuyên bạn nên pick bằng cách sử dụng hàm GroupEnumUnitsInRange của vJass chắc dễ sử dụng hơn!
cái thứ hai là bạn nên để hàm move unit sau một Wait Time lớn hơn giá trị chờ là 0.0,như vậy thì Cooldown của spell mới thực hiện được!

---------- Post added at 18:45 ---------- Previous post was at 18:43 ----------

UMSWE nó có chạy được với patch mới đâu mà cố xài cho nó lỗi ra o.O

Chạy với Patch là sao cậu?
Thường UMSWE cũng tùy vào phiên bản của Jasshelper và của Patch game war3,nếu chạy không phù hợp thì nên cài lại Jassnewgen 1.5d để nó tự tìm lại mục chứa patch của W3!Mình bị rồi!Nói chung,nếu phiên bản Jasshelper hiện đại hơn Patch game,có sử dụng cũng khó hỗ trợ được,còn Patch game mới,jasshelper cũ thì không làm gì bằng vJass kiểu mới được luôn!
 
Chỉnh sửa cuối:
bạn thử cho mình một ví dụ về pick group đi cái này mình k bík làm @@
 
Bạn nên convert từ trigg thường sang Custom text ,rồi gõ vào sau
Mã:
private function KiểmTra takes nothing returns boolean
   return IsUnitEnemy(GetFilterUnit(),GetOwningPlayer(GetTriggerUnit())) and IsUnitAliveBJ(GetFilterUnit())==true 
endfunction

function CáiGìĐây takes nothing returns nothing
   local group G = CreateGroup()
   local unit enum
   local real dam = sát thương bạn đưa ra
   call GroupEnumUnitsInrange(G,GetUnitX(GetTriggerUnit()),GetUnitY(GetTriggerUnit()),400,Condition(function KiểmTra))
   loop
      set enum=FirstOfGroup(G)
      exitwhen (enum==null)
      call UnitDamageTarget(GetTriggerUnit(),enum, dam,false,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_ENHANCED,null)
      call GroupRemoveUnit(enum)
   endloop
   call GroupClear(G)
   set enum=null
   call DestroyGroup(G)
endfunction
Trong hàm trên,400 là khoảng cách gây,GetUnitX,GetUnitY là điểm X,Y của Mục tiêu gom nhóm,nếu thay vì gom nhóm tại một mục tiêu,bạn có thể gom nhóm tại một địa điểm,như GetLocationX (Địa điểm),GetLocationY(Địa điểm)
 
Chỉnh sửa cuối:
YAN[asian];18497155 nói:
Ai còn cái demo map ulti của Ursa trong Dota thì share mình nhé. Thanks!

. ...
 
Ai còn cái demo map ulti của Ursa trong Dota thì share mình nhé. Thanks!
Mình không có rồi,nhưng bạn thử diễn tả lại chiêu thức đó xem,nếu có thể mình làm!
 
À đó là skill khi hú lên sẽ cộng dam cho Hero = % máu hiện tại của nó (add = abi +dam), check theo thời gian, cứ máu giảm thì dam cũng giảm. Ngày trước xem cũng hiểu hiểu mà lâu ko động quên xừ nó rồi x_x.
 
Chỉnh sửa cuối:
cho mình hỏi 1 câu: sau khi làm cho quân tự spawn ở 1 region nào đó, đặt 1 building bên cạnh rồi vào game cứ phá hủy building đó là quân ko spawn nưa thì làm the nào?

ví dụ như thế
Mã:
Respawn
    Events
        Time - Every 15.00 seconds of game time
    Conditions
    Actions
        Unit - Create 1 Footman for Player 1 (Red) at (Center of (Playable map area)) facing Default building facing degrees
đây là trigger Respawn còn về turn off thì cái này.
Mã:
TurnOff Respawn
    Events
        Unit - Barracks 0000 <gen> Dies
    Conditions
    Actions
        Trigger - Turn off Respawn <gen>

@DylandKyo
Mã:
(Line: 10) (Word: 3) Location Leak
Set Points[16] = ((Position of Caster[16]) offset by 200.00 towards ((Real((Integer A))) x 36.00) degrees)
Set Points[16] = ^Leak

(Line: 10) (Word: 6) Location Leak
Set Points[16] = ((Position of Caster[16]) offset by 200.00 towards ((Real((Integer A))) x 36.00) degrees)
Set Points[16] = ((Position of Caster[16]) ^Leak

Scan Complete
Location leaks: 2
Special Effect leaks: 0
Lightning leaks: 0
Unit Group leaks: 0
Player Group leaks: 0

Variables
UnitGroups[16] : (Line: 12) Unit Group - Removed: Yes

Summary
Total Leaks: 2
Unremoved Variables: 0
Scan duration: 0 seconds
Total Lines Scanned: 17
Total Words Scanned: 159
tổng số check ra là như thế :|
UMSWE nó có chạy được với patch mới đâu mà cố xài cho nó lỗi ra o.O

UMSWE lỗi chẳng bằng EGUi đâu anh rex à =))


Ai làm spell khi cast đối tượng thì hero chạy tới đối tượng tấn công đối tượng đã cast ? Thanks nhìu

mình ví dụ như thế nhé :D
Mã:
Move
    Events
        Unit - A unit Starts the effect of an ability
    Conditions
        (Ability being cast) Equal to Storm Bolt
    Actions
        Set Tmp_Cast = (Triggering unit)
        Set Tmp_Vitm = (Target unit of ability being cast)
        Unit - Order Tmp_Cast to Attack Tmp_Vitm
        Wait until ((Distance between (Position of Tmp_Cast) and (Position of Tmp_Vitm)) Less than or equal to 200.00), checking every 0.10 seconds
        If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            If - Conditions
            Then - Actions
                Unit - Cause Tmp_Cast to damage Tmp_Vitm, dealing 500.00 damage of attack type Spells and damage type Normal
            Else - Actions
 

Attachments

YAN[asian];18500070 nói:
À đó là skill khi hú lên sẽ cộng dam cho Hero = % máu hiện tại của nó (add = abi +dam), chesk theo thời gian, cứ máu giảm thì dam cũng giảm. Ngày trước xem cũng hiểu hiểu mà lâu ko động quên xừ nó rồi x_x.

Đây,chiêu thức bạn cần gửi theo file dính kèm!Mỹ mãn rồi nhé!
View attachment Damage Based on Life.rar
 
@Sky ở cái trên sky đưa là cover từ 1 cái mới hay là cover từ cái củ của bjn
 
Cho e hỏi là vd e làm 1 skill summon max là 3 unit thì khi summon lần thứ 4 thì làm sao để unit đầu tiên biến mất ?? :-/
 
Status
Không mở trả lời sau này.
Back
Top