Ability Help

NoobImbaPro

You can change this now in User CP.
Reaction score
60
Guys I want to make an ability that after activation the caster has increased attack speed and damage for 5 attacks. At 5th attack the target is slowed by 30 ms/as.
The problem if that as and damage bonus doesn't go to hero and from the first attack the curse is applied. Here is the trigger:
JASS:
scope Damage initializer init
globals
    integer AC4 = 'WA03'
    integer AD = 'WATT'
    integer AS = 'ATTS'
    integer SLOW = 'DSLO'
    integer a = 1
    group g = CreateGroup()
    integer array that
endglobals
//===========================================================================
private function Actions takes nothing returns nothing
local unit ut = GetTriggerUnit()
local integer b = GetUnitAbilityLevel(ut,AC4)
call SetUnitUserData(ut,a)
call GroupAddUnit(g, ut)
set that[a]=5
set a = a + 1
call SetUnitAbilityLevel(ut, AD, b)
set ut = null
endfunction
//===========================================================================
private function Actions2 takes nothing returns nothing
local unit ut = GetTriggerDamageSource()
local integer a = GetUnitUserData(ut)
if that[a] == 1 then
 call IssueTargetOrder( DUMMY , "slow", GetTriggerUnit())
 call UnitRemoveAbility(ut, AD)
 call UnitRemoveAbility(ut, AS)
 call GroupRemoveUnit(g, ut)
endif
set ut = null
set that[a] = that[a] - 1
endfunction
//===========================================================================
private function Conditions takes nothing returns boolean
    return GetSpellAbilityId() == AC4
endfunction
//===========================================================================
private function Conditions2 takes nothing returns boolean
    local integer a = GetUnitUserData(GetTriggerDamageSource())
    return GetTriggerDamageType() == DAMAGE_TYPE_ATTACK and that[a]!= 0
endfunction
//===========================================================================
private function init takes nothing returns nothing
    local trigger CC = CreateTrigger()
    local trigger CCB = CreateTrigger()
    call TriggerRegisterAnyUnitEventBJ( CC, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddAction( CC, function Actions )
    call TriggerAddCondition( CC, function Conditions)
    call TriggerRegisterDamageEvent(CCB, 2)
    call TriggerAddAction( CCB, function Actions2)
    call TriggerAddCondition( CCB, function Conditions2)
endfunction
endscope
 

NoobImbaPro

You can change this now in User CP.
Reaction score
60
I changed back to my old trigger, twisted it a little bit, and now it works perfectly, but there is a problem that at the first cast it laggs a little
JASS:
scope ABCD initializer init
//===========================================================================
globals
    integer AS = 'ATTS'
    integer AC3 = 'WA03'
    integer AD = 'WATT'
    integer j =0
    integer i = 5
    string slow = "slow"
    unit array Unit
    integer array Attacks
endglobals

//===========================================================================
private function RegUnit takes unit a returns nothing
        set j = j + 1
        set Unit[j]= a
endfunction
//===========================================================================    
private function Check takes unit b returns integer
        local integer int = 1
        local integer int2 = 0
        if j == 0 then
            return 0
        else
            loop
                if b == Unit[int] then
                    set int2 = 1
                else
                    set int = int + 1
                endif
            exitwhen int > j or int2 == 1
            endloop
            if int2 == 1 then
                return int
            else
                return 0
            endif
        endif
endfunction
//===========================================================================
private function categorize takes nothing returns nothing
        local integer int3 = 1
        local integer i1=0
        local integer i2
        loop
            if Unit[int3] != null and i1==0 then
                set int3 = int3 + 1
            elseif Unit[int3] == null then
                set i1 = i1 + 1
                set int3 = int3 +1
            elseif Unit[int3] != null and i1>0 then
                set i2 = int3 - i1
                set Unit[i2] = Unit[int3]
                set Attacks[i2] = Attacks[int3]
                set Unit[int3]=null
                set i1 = i1 -1
            endif
        exitwhen int3>j
        endloop
        set j=i2
endfunction
//===========================================================================
private function actions takes nothing returns nothing
local unit ut = GetTriggerUnit()
local integer b = GetUnitAbilityLevel(ut,AC3)
local integer a = Check(ut)
 if a == 0 then
    call RegUnit(ut)
    set a = j
 endif
set ut=null
set Attacks[a] = 5
call UnitAddAbility(Unit[a], AS)
call UnitAddAbility(Unit[a], AD)
call TriggerSleepAction(0.01)
call SetUnitAbilityLevel(Unit[a], AD, b)
endfunction

private function actions2 takes nothing returns nothing
local unit ut2 = GetEventDamageSource()
local integer d = Check(ut2)
set ut2 = null
set Attacks[d] = Attacks[d] - 1
if Attacks[d] == 0 then
 call IssueTargetOrder(DUMMY, slow, GetTriggerUnit()) 
 call UnitRemoveAbility(Unit[d], AS)
 call UnitRemoveAbility(Unit[d], AD)
 set Unit[d]=null
 call categorize()
endif
endfunction

private function conditions takes nothing returns boolean
    return GetSpellAbilityId() == AC3 and not(GetUnitAbilityLevel(GetEventDamageSource(), AD) > 0)
endfunction

private function conditions2 takes nothing returns boolean
    return GetTriggerDamageType() == DAMAGE_TYPE_ATTACK and GetUnitAbilityLevel(GetEventDamageSource(), AD) > 0
endfunction

//===========================================================================
private function init takes nothing returns nothing
    local trigger df51 = CreateTrigger()
    local trigger df53 = CreateTrigger()
    call TriggerRegisterAnyUnitEventBJ( df51, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerRegisterDamageEvent(df53, 800)
    call TriggerAddAction(df51, function actions)
    call TriggerAddAction(df53, function actions2)
    call TriggerAddCondition(df51, function conditions)
    call TriggerAddCondition(df53, function conditions2)
endfunction
endscope
 

NoobImbaPro

You can change this now in User CP.
Reaction score
60
@Hex.16
I saw it just needed this
JASS:
private function actions takes nothing returns nothing
local unit ut = GetTriggerUnit()
local integer b = GetUnitAbilityLevel(ut,AC3)
local integer a = Check(ut)
 if a == 0 then
    call RegUnit(ut)
    set a = j //<----If I put "a += 1" then the second unit would replace the first one because when no unit is detected on check function it returns 0.
 endif
set ut=null
set Attacks[a] = 5
call UnitAddAbility(Unit[a], AS)
call UnitAddAbility(Unit[a], AD)
call TriggerSleepAction(0.01)
call SetUnitAbilityLevel(Unit[a], AD, b)
endfunction


@hgkjfhfdsj

How can I preload abilities???

EDIT:I found now, because I used the magic "search" button
 
General chit-chat
Help Users
  • No one is chatting at the moment.

      The Helper Discord

      Staff online

      Members online

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top