Jass code lagging need help to make this code work better

romanandre

New Member
Reaction score
2
I want to cast a dummy spell whenever I attacked when I have a buff , can anyone help? its lagging a lot.
I belive its the condition on if/then/else, should I make a function or a variable for this condition?.
idk how to post with jass code window if anyone can help.
Thanks for the help.

here is the code

//================================

JASS:
 function Trig_Dot_Conditions takes nothing returns boolean
 return GetUnitAbilityLevel(GetAttacker(), 'B000') > 0
endfunction
function Trig_Dot_Actions takes nothing returns nothing
 local unit attacker = GetAttacker()
 local unit attacked = GetTriggerUnit()
if GetUnitAbilityLevel(attacked, 'B001') == 0 and GetUnitAbilityLevel(attacked, 'B002') == 0 and GetUnitAbilityLevel(attacked, 'B003') == 0 and GetUnitAbilityLevel(attacked, 'B004') == 0 and GetUnitAbilityLevel(attacked, 'B005') == 0 then
call UnitAddAbility(DUMMY, 'A003')
call IssueTargetOrder(DUMMY, "acidbomb", attacked)
call UnitRemoveAbility(DUMMY, 'A003')
else
endif
endfunction

//===========================================================================
function InitTrig_Dot takes nothing returns nothing
    set gg_trg_Dot = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ(gg_trg_Dot, EVENT_PLAYER_UNIT_ATTACKED )
    call TriggerAddAction( gg_trg_Dot, function Trig_Dot_Actions )
    call TriggerAddCondition( gg_trg_Dot, Condition( function Trig_Dot_Conditions) )
endfunction


edit: added jass tag
 

Dirac

22710180
Reaction score
147
Preload the ability u add to the unit. Otherwise it would lag a lot the first time it's used. Also use the [noparse]
JASS:
[/noparse] tags to post your code

to preload do this at the init trigger
JASS:
local unit u=CreateUnit(Player(0),'hfoo',0,0,0)
call UnitAddAbility(u,'A003')
call RemoveUnit(u)

Another thing causing lag is that you never remove the DUMMY unit from the game, make sure to add an expiration timer to it
 

romanandre

New Member
Reaction score
2
I'm using dummycaster system , so I dont realy have to remove the unit , but thanks it helped. + rep.
edit : I made some tests and removed the condition and preloaded the ability but it still lags a lot , anyone have an idea? thanks.
 

Dirac

22710180
Reaction score
147
Are you sure is this trigger the one causing lag? it looks fine to me. How many units are using this thing? Is there a trigger for the 'A003' ability? or is it just a normal variation of acid bomb?
 

luorax

Invasion in Duskwood
Reaction score
67
You're leaking two unit variables and a unit.

This is how it should look like:

JASS:
function Trig_Dot_Conditions takes nothing returns boolean
    return GetUnitAbilityLevel(GetAttacker(),'B000')>0
endfunction
function Trig_Dot_Actions takes nothing returns nothing
    local unit attacker=GetAttacker()
    local unit attacked=GetTriggerUnit()
    if GetUnitAbilityLevel(attacked,'B001')==0 and GetUnitAbilityLevel(attacked,'B002')=0 and GetUnitAbilityLevel(attacked,'B003')==0 and GetUnitAbilityLevel(attacked,'B004')==0 and GetUnitAbilityLevel(attacked,'B005')==0 then
        call UnitAddAbility(DUMMY,'A003')
        call IssueTargetOrder(DUMMY,"acidbomb",attacked)
        call UnitRemoveAbility(DUMMY,'A003')
    endif
    set attacker=null
    set attacked=null
endfunction

//===========================================================================
function InitTrig_Dot takes nothing returns nothing
    //I prefer local triggers
    local trigger t=CreateTrigger()
    call TriggerRegisterAnyUnitEventBJ(t,EVENT_PLAYER_UNIT_ATTACKED)
    call TriggerAddAction(t,function Trig_Dot_Actions)
    call TriggerAddCondition(t,Condition(function Trig_Dot_Conditions))
    se t=null
endfunction
 

romanandre

New Member
Reaction score
2
still lagging with

JASS:
 function Trig_Dot_Conditions takes nothing returns boolean
    return GetUnitAbilityLevel(GetAttacker(),'B000')>0
endfunction
function Trig_Dot_Actions takes nothing returns nothing
    local unit attacker=GetAttacker()
    local unit attacked=GetTriggerUnit()
    if GetUnitAbilityLevel(attacked,'B001') == 0 and GetUnitAbilityLevel(attacked,'B002') == 0 and GetUnitAbilityLevel(attacked,'B003') == 0 and GetUnitAbilityLevel(attacked,'B004') == 0 and GetUnitAbilityLevel(attacked,'B005') == 0 then
        call UnitAddAbility(DUMMY,'A003')
        call IssueTargetOrder(DUMMY,"acidbomb",attacked)
        call UnitRemoveAbility(DUMMY,'A003')
    endif
    set attacker=null
    set attacked=null
endfunction

//===========================================================================
function InitTrig_Dot takes nothing returns nothing
    //I prefer local triggers
    local trigger t=CreateTrigger()
    call TriggerRegisterAnyUnitEventBJ(t,EVENT_PLAYER_UNIT_ATTACKED)
    call TriggerAddAction(t,function Trig_Dot_Actions)
    call TriggerAddCondition(t,Condition(function Trig_Dot_Conditions))
    set t=null
endfunction


I'm going to attach my map so you can have a better idea how it looks. Thanks for help.
 

Attachments

  • Pally.w3x
    31.7 KB · Views: 240

tommerbob

Minecraft. :D
Reaction score
110
Just so I understand what this spell is supposed to do:

If the attacker has the Seal of Truth buff, then when he attacks a unit, it applies a DoT to his target?

1) That trigger does not lag for me.

2) If you simply want to apply a stackable DoT to the target, there is an easier way to do this without using 5 separate buffs (unless you WANT 5 separate buffs, but they are not necessary).

3) I recommend changing the event from being attacked, to a damage event. Attacked events fire BEFORE the damage is dealt, so they can be abused.
 

Magthridon96

Member
Reaction score
2
If you preload the abilities like this:

JASS:
private module Init
    private static method onInit takes nothing returns nothing
        local unit u = CreateUnit(Player(15),'dumy',0,0,0) // Assuming you're using DummyCaster by J4L (Though I recommend Nestharus' DummyCaster)
        call UnitAddAbility(u,'A003')
        call RemoveUnit(u)
        set u = null
    endmethod
endmodule
private struct Inits extends array
    implement Init
endstruct


The lag should decrease.. by a lot.
 
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