HomeUser Control Panel (unavailable in archive)ForumsTutorialsArt GalleryResourcesMaps

What is better ?

08-02-2008, 05:37 PM#1
Flame_Phoenix
Hi guys I have a question, what is better to use?
- Action only
- Condition only
- A code should have both Action and Condition

Many people like using Action only and some mods say we should always use both. Can some one tell me ?
08-02-2008, 05:46 PM#2
Troll-Brain
A condition is faster than an action.
You can use waits in an action but not in a condition.
08-03-2008, 05:29 AM#3
ADOLF
condition faster if you use ExecuteTrigger/EvaluateTrigger, but this very small time, therefore if yours trigger reacts to event in game - imho it not important

also i recommend use one trigger with one condition/action

Collapse JASS:
// ---> //

//bad
function CONDITION_00 takes nothing returns boolean
 return GetSpellAbilityId() ='A000'
endfunction

function CONDITION_01 takes nothing returns boolean
 return GetSpellAbilityId() ='A001'
endfunction

// ;;------------------

// good
function MY_ACTIONS takes nothing returns nothing
 local integer i=GetSpellAbilityId() // as example
 if i=='A000'then
  call blablabla()
 else if i=='A001'then
  call blublublu()
 // ...
 endif
endfunction

// <--- //
08-03-2008, 10:17 AM#4
Flame_Phoenix
What about:

Collapse JASS:
function Condition takes nothing returns boolean
    if (GetSpellAbilityId() == 'A000') then
        //do stuff
    endif
    return false
endfunction


Anitarf said this was a good way, is it the best ?
08-03-2008, 10:32 AM#5
Captain Griffen
That's the fastest way, I think.
08-03-2008, 10:52 AM#6
Flame_Phoenix
mmmm If you say so, it must be truth.
08-03-2008, 10:56 AM#7
Captain Griffen
Not if I say 'I think'.
08-03-2008, 11:17 AM#8
Flame_Phoenix
Quote:
Not if I say 'I think'.
OMG ! You made a post and you are not 100% sure of it ! Noo the world is going to end !! WhyY!
(joking, relax =P)

Mm, I will see if I can contact Vex or one of the Gods from here so they can share their opinion with us.
08-03-2008, 12:22 PM#9
cohadar
Both Conditions and Actions should be used in a way Blizzard intended them to be used.

Doing stuff like this is bad:
Collapse JASS:
function Condition takes nothing returns boolean
    if (GetSpellAbilityId() == 'A000') then
        //do stuff
    endif
    return false
endfunction

It clogs out the main game thread which can lead to considerable event response lag (time between you click on an ability and time it executes)

Also you cannot use TriggerSleepAction(seconds) inside a Condition and TriggerSleedCondition() function does not exist :P

That said it is OK to optimize some simple triggers by moving stuff from action to a condition but nothing too heavy.
For example this is OK:
Collapse JASS:
library Example

globals
    private group G = CreateGroup()
endglobals

// here some periodic function does something to units in a group

function Condition takes nothing returns boolean
    if (GetSpellAbilityId() == 'A000') then
        call GroupAddUnit(G, GetSpellTargetUnit())
        set TimeLeft[GetSpellTargetUnit()] = GetUnitAbilityLevel(GetTriggerUnit(), 'A000')*10.
    endif
    return false
endfunction

endlibrary


This is not ok:
Collapse JASS:
function Condition takes nothing returns boolean
    if (GetSpellAbilityId() == 'A000') then
        call Dummy_create(GetTriggerUnit(), AID_DUMMY, GetUnitAbilityLevel(hero, AID_SPELL), 5.)
        call IssueTargetOrderById(bj_lastCreatedUnit, OID_DUMMY, GetSpellTargetUnit())
    return false
endfunction

Spells with heavy stuff like creating dummy casters or sliding units or spells with custom effects should never be done in conditions.

In fact in 99% of cases you should use Conditions and Actions the way they are intended to be used.

That 1% that differs are stuff like DamageDetection systems where you register OnDamage trigger with default Condition and the call TriggerExecute from it for a specific stuff.
Here is such a condition from ORBEngine:
Expand JASS:

========================================================
But I doubt you will be making this kind of triggers any time soon,
so the answer to your question is:
Use Conditions and Actions like Blizzard does.
08-03-2008, 01:13 PM#10
Flame_Phoenix
Ahhh great. Thx for clearing this up !
+rep!
08-03-2008, 01:38 PM#11
DioD
Any test results or any other kind of prove ?

Quote:
Use Locals like Blizzard does - never null them!