Why it never stops

Gtam

Lerning how to write and read!! Yeah.
Reaction score
164
Why does this trigger keep going and never stops
JASS:
function Trig_Bolt_Conditions takes nothing returns boolean
    return GetSpellAbilityId() == 'AHtb'
endfunction

function Trig_Bolt_Actions takes nothing returns nothing
    set udg_Boolean = true
    set udg_u = GetTriggerUnit()
    set udg_t = GetSpellTargetUnit()
    call TriggerSleepAction(2)
    set udg_Boolean = false
endfunction
//===========================================================================
function InitTrig_Bolt takes nothing returns nothing
    set gg_trg_Bolt = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Bolt, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition( gg_trg_Bolt, Condition( function Trig_Bolt_Conditions ) )
    call TriggerAddAction( gg_trg_Bolt, function Trig_Bolt_Actions )
endfunction

JASS:
function Trig_Knock_Conditions takes nothing returns boolean
    return udg_Boolean == true
endfunction
     
function Trig_Knock_Actions takes nothing returns nothing
    local unit u = udg_u
    local unit t = udg_t
    local real x = GetUnitX(t)
    local real y = GetUnitY(t)
    local real f = GetUnitFacing(t) - 180.
    local real a = 3 * Cos(f * .0175)
    local real b = 3 * Sin(f * .0175)
//Now all the locals are declared time to knock back the unit
    call PauseUnit(t, true)
    call SetUnitPosition(t, x + a, y + b)
    call UnitDamageTargetBJ(u, t, 5.00, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL )
    call AddSpecialEffectTarget("Abilities\\Spells\\Human\\FlakCannons\\FlakTarget.mdl", t, "chest")
    call PauseUnit(t, false)
// Time to get those Leaks
    call DestroyEffect( GetLastCreatedEffectBJ() )
    set u = null
    set t = null
endfunction
//===========================================================================
function InitTrig_Knock takes nothing returns nothing
    set gg_trg_Knock = CreateTrigger(  )
    call TriggerRegisterTimerEventPeriodic( gg_trg_Knock, 0.03 )
    call TriggerAddAction( gg_trg_Knock, function Trig_Knock_Actions )
endfunction
 

Troll-Brain

You can change this now in User CP.
Reaction score
85
I guess you are setting "udg_Boolean" to true somewhere else

EDIT : No you don't have added any condition to your trigger gg_trg_Knock
 

Komaqtion

You can change this now in User CP.
Reaction score
469
Well, instead of 2 lines for the effect, it could be this:
JASS:
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Human\\FlakCannons\\FlakTarget.mdl", t, "chest"))


And instead of using two/four variable do this:
JASS:
    local real x = GetUnitX(t) + (3 * Cos(f * .0175))
    local real y = GetUnitY(t) + (3 * Sin(f * .0175))


And move those line below:
JASS:
    local real f = GetUnitFacing(t) - 180.
 

Gtam

Lerning how to write and read!! Yeah.
Reaction score
164
Like This
JASS:
function Trig_Bolt_Conditions takes nothing returns boolean
    return GetSpellAbilityId() == 'AHtb'
endfunction

function Trig_Bolt_Actions takes nothing returns nothing
    set udg_Boolean = true
    set udg_u = GetTriggerUnit()
    set udg_t = GetSpellTargetUnit()
    call TriggerSleepAction(2)
    set udg_Boolean = false
endfunction
//===========================================================================
function InitTrig_Bolt takes nothing returns nothing
    set gg_trg_Bolt = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Bolt, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition( gg_trg_Bolt, Condition( function Trig_Bolt_Conditions ) )
    call TriggerAddAction( gg_trg_Bolt, function Trig_Bolt_Actions )
endfunction

JASS:
function Trig_Knock_Conditions takes nothing returns boolean
    return udg_Boolean == true
endfunction
     
function Trig_Knock_Actions takes nothing returns nothing
    local unit u = udg_u
    local unit t = udg_t
    local real f = GetUnitFacing(t) - 180.
    local real x = GetUnitX(t) + (3 * Cos(f * .0175)) 
    local real y = GetUnitY(t) + (3 * Sin(f * .0175))
//Now all the locals are declared time to knock back the unit
    call PauseUnit(t, true)
    call SetUnitPosition(t, x, y)
    call UnitDamageTargetBJ(u, t, 5.00, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL )
    call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Human\\FlakCannons\\FlakTarget.mdl", t, "chest"))
    call PauseUnit(t, false)
// Time to get those Leaks
    set u = null
    set t = null
endfunction
//===========================================================================
function InitTrig_Knock takes nothing returns nothing
    set gg_trg_Knock = CreateTrigger(  )
    call TriggerRegisterTimerEventPeriodic( gg_trg_Knock, 0.03 )
    call TriggerAddCondition( gg_trg_Knock, Condition( function Trig_Knock_Conditions ) )
    call TriggerAddAction( gg_trg_Knock, function Trig_Knock_Actions )
endfunction
 

Romek

Super Moderator
Reaction score
963
If you're gonna code like that, you might as well stick to GUI. =|
 

Gtam

Lerning how to write and read!! Yeah.
Reaction score
164
Wow. Im sorry for my terrible code but cheez cut me some slak im still learning unlike you
 

Frozenhelfir

set Gwypaas = Guhveepaws
Reaction score
56
If you're gonna code like that, you might as well stick to GUI. =|

This. Either that or start with some more basic stuff. Also those two triggers don't even seem related. You also need to provide more information, such as how do these two triggers tie together and what the purpose is for it. "Fix it" doesn't cut it. You may want to look into using structs for this though.
 

Gtam

Lerning how to write and read!! Yeah.
Reaction score
164
I dont know how structs work. And they are related by the one turns a boolean true and the other on runs when its true
 

Dinowc

don't expect anything, prepare for everything
Reaction score
223
structs are like arrays that allow you to store different type of data into one which you can access easily

a normal array would be:

JASS:
set data[0] = 1
set data[1] = 5
set data[2] = 12
set data[3] = 28


structs would be more like:

JASS:
set data[0] = 1
set data[1] = CreateTimer()
set data[2] = GetTriggerUnit()
set data[3] = "You get this example?"


you declare structs like this:

JASS:
struct <struct name>
      <struct's members>
endstruct


so in the previous example, you would declare it like:

JASS:
struct data
      integer int
      timer t
      unit u
      string s
endstruct


to use this in a function, you must create the struct
here's is another example:

JASS:
function func takes nothing returns nothing
       local data d = data.create() // data is the struct which we gonna use, d is just a name (it can be anything)
      
       set d.int = 1 // notice the &quot;.&quot; after the data, you use it a lot in structs <img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" class="smilie smilie--sprite smilie--sprite7" alt=":p" title="Stick Out Tongue    :p" loading="lazy" data-shortname=":p" />
       set d.t = CreateTimer()
       set d.u = GetTriggerUnit()
       set d.s = &quot;You get this example?&quot;
       
       ......
       
       call d.destroy()  // you should always destroy structs when you don&#039;t need them anymore
endfunction


hope you understand something
 

Gtam

Lerning how to write and read!! Yeah.
Reaction score
164
So data is the struct. What do i then do with the struct.
 

Dinowc

don't expect anything, prepare for everything
Reaction score
223
[del]data is the name

a is the struct

I made a bad example xd[/del]

What do i then do with the struct

well you could have made it like:

JASS:
globals
      integer array int
      timer array t
      unit array u
      string array s
endglobals

function func takes nothing returns nothing
      set int[0] = 1
      set t[0] = CreateTimer()
      set u[0] = GetTriggerUnit()
      set s[0] = &quot;You get this example?&quot;
endfunction


it's completely the same, but it just makes everything complicated

I don't know how to explain... just 1 thing:

struct is your friend :thup:


you would attach the struct to a timer using TimerUtils like this:

JASS:
function A takes nothing returns nothing
      local data d = data.create() 
      
      set d.int = 1
      set d.t = CreateTimer()
      set d.u = GetTriggerUnit()
      set d.s = &quot;You get this example?&quot;
       
      call SetTimerData(d.t, data)
      call StartTimer(d.t, 0.03, true, function B)
endfunction


and retrieve the struct like this:

JASS:
function B takes nothing returns nothing
       local data d = GetTimerData(GetExpiredTimer)
        
       and use it <img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" class="smilie smilie--sprite smilie--sprite1" alt=":)" title="Smile    :)" loading="lazy" data-shortname=":)" />
endfunction


that's how you do knockback in Jass, that's what I meant when I said you should use periodic timers, not events :)

I think it's harder for me to explain, than for you to learn
it's so easy when you get used to it, trust me
 

Gtam

Lerning how to write and read!! Yeah.
Reaction score
164
Yes but im still pretty new to jass. Is there a tut for structs
 
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