Changing inputable conditions?

dudeim

New Member
Reaction score
22
Hey,

first of all sorry for the bad title couldn't think of a good one.

Ok so I have a problem in my code I have a struct in which a function is ran every x seconds (user can input the x themselfs) now I want to add a check every time that function runs so it can either not go off or it can.
JASS:
code b //code cannot be an array so this doesn't work

method addCondition takes code b returns code
    set .b = b
    return .b
endmethod

private method isTrue takes nothing returns boolean
local code c = .b
return Condition(c)
endmethod

I had this but it's not working as I need to be able to input the condition anytime.
So if I do this it should work:
JASS:
function something ....
local Struct s = Struct.create(interval 5, totaltime 20, somefunctionthatwillberan) //this will run for a total of 20 sec and the function that will go off will run every 5 seconds
call s.addCondition(function somefunctionwhichreturnsabooleanvalue) //now it checks everytime if this value is true
call TSA(10)
call s.addCondition(function someotherfunctionwhichreturnsanotherbooleandifferentfromthefirst) //now it checks if this value is true
endfunction


So how would I go and do this?
Hope I made myself clear

Thanks!
 

Dirac

22710180
Reaction score
147
JASS:
code myCondition

private method isTrue takes nothing returns boolean
return Condition(.myCondition)
endmethod

JASS:
function something ....
local Struct s = Struct.create(interval 5, totaltime 20, somefunctionthatwillberan)
set s.myCondition(function somefunctionwhichreturnsabooleanvalue)
call TSA(10)
set s.myCondition(function someotherfunctionwhichreturnsanotherbooleandifferentfromthefirst)
endfunction

remember that TSAs are highly inaccurate, it might be your problem, use TimerUtils
 

dudeim

New Member
Reaction score
22
The function something was just a random example it doesn't exist in real the current problem was that code myCondition is a struct variable but jasshelper generates an error that I cannot have a code array.
 

tooltiperror

Super Moderator
Reaction score
231
JASS:
globals
    triggercondition ConditionForSpell
endglobals

function Condition2 takes nothing returns boolean
    call BJDebugMsg("Condition 2 has been fired!")
    return false
endfunction

function Condition1 takes nothing returns boolean
    call BJDebugMsg("Condition 1 has been fired!")
    return false
endfunction

function onInit takes nothing returns nothing
    local trigger t = CreateTrigger()
    call TriggerRegisterAnyPlayerUnitEventBJ(t, EVENT_PLAYER_UNIT_SPELL_EFFECT) // idk what it's called

    // The condition is now Condition1
    set ConditionForSpell = TriggerAddCondition(t, Condition(function Condition1))

    // It now has no conditions
    call TriggerRemoveCondition(t, ConditionForSpell)

    // Now it is Condition2
    call TriggerAddCondition(t, Condition(function Condition2))
endfunction
 

dudeim

New Member
Reaction score
22
So and how would I now, depending on the outcome of the triggercondition, run a function or not. As I currently had something like this in mind
JASS:
globals
triggercondition TC
endglobals
function isTrue takes nothing returns boolean
return TC
endfunction

function callback ...
if isTrue() then 
//do stuff
endif
endfunction

but I don't think this will work now will it?
 

Sevion

The DIY Ninja
Reaction score
413
That won't work because you're returning a triggercondition when it should be returning a boolean.

Why don't you just use a handler trigger and use [ljass]TriggerEvaluate()[/ljass]?

I'm doing a similar thing for a library I'm working on.

The user defines a boolexpr which is then saved and when the time is right, I attach it to the handler trigger and do an:

JASS:
if ( TriggerEvaluate(handlerTrigger) ) then
    call FireEvent(theEvent)
endif
 
General chit-chat
Help Users
  • No one is chatting at the moment.

      The Helper Discord

      Members online

      No members online now.

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top