[Solved] Triggering via different spell levels

Level 25
Joined
Aug 18, 2009
Messages
4,087
There is the event
constant unitevent EVENT_UNIT_HERO_SKILL=ConvertUnitEvent(79)
, respectively
constant playerunitevent EVENT_PLAYER_HERO_SKILL=ConvertPlayerUnitEvent(42)
whereas
constant native GetLearnedSkill takes nothing returns integer
delivers the ability being learned and
constant native GetLearnedSkillLevel takes nothing returns integer
the new level or you ask for the current level of an ability for a unit via
native GetUnitAbilityLevel takes unit whichUnit, integer abilcode returns integer
.
 
Level 17
Joined
Feb 11, 2011
Messages
1,860
Something like this:

  • Activate Triggers
    • Events
      • Unit - A unit Learns a skill
    • Conditions
    • Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Learned Hero Skill) Equal to [your ability]
        • Then - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (Level of [your ability] for (Triggering unit)) Equal to 1
            • Then - Actions
              • Trigger - Turn on (your trigger)
            • Else - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (Level of [your ability] for (Triggering unit)) Equal to 2
            • Then - Actions
              • Trigger - Turn on (your trigger 2)
            • Else - Actions
          • -------- And so on... --------
        • Else - Actions
 
Level 25
Joined
Aug 18, 2009
Messages
4,087
JASS:
function Trig takes nothing returns nothing
    local integer level = GetLearnedSkillLevel()

    if (level == 1) then
        //level 1 actions
    elseif (level == 2) then
        //level 2 actions
    else
        //all other levels actions
    endif
endfunction

function TrigConds takes nothing returns boolean
    return (GetLearnedSkill() == 'ABCD')
endfunction

function Init takes nothing returns nothing
    local trigger t = CreateTrigger()

    call TriggerRegisterAnyUnitEventBJ(t, EVENT_PLAYER_HERO_SKILL)
    call TriggerAddCondition(t, Condition(function TrigConds))
    call TriggerAddAction(t, function Trig)

    set t = null
endfunction

or if you want to have the current level on spelleffect event:

JASS:
function Trig takes nothing returns nothing
    local integer level = GetUnitAbilityLevel(GetSpellAbilityUnit(), 'ABCD')

    if (level == 1) then
        //level 1 actions
    elseif (level == 2) then
        //level 2 actions
    else
        //all other levels actions
    endif
endfunction

function TrigConds takes nothing returns boolean
    return (GetSpellAbilityId() == 'ABCD')
endfunction

function Init takes nothing returns nothing
    local trigger t = CreateTrigger()

    call TriggerRegisterAnyUnitEventBJ(t, EVENT_PLAYER_UNIT_SPELL_EFFECT)
    call TriggerAddCondition(t, Condition(function TrigConds))
    call TriggerAddAction(t, function Trig)

    set t = null
endfunction

You may also abandon the if/selection structure and directly assign/retrieve code:

JASS:
function ActionsOf1 takes nothing returns nothing
    //level 1 actions
endfunction

function ActionsOf2 takes nothing returns nothing
    //level 2 actions
endfunction

function ActionsOf3 takes nothing returns nothing
    //level 3 actions
endfunction

function Trig takes nothing returns nothing
    local integer level = GetUnitAbilityLevel(GetSpellAbilityUnit(), 'ABCD')

    call TriggerExecute(CODES[level])
endfunction

function TrigConds takes nothing returns boolean
    return (GetSpellAbilityId() == 'ABCD')
endfunction

function Init takes nothing returns nothing
    local trigger t = CreateTrigger()

    call TriggerRegisterAnyUnitEventBJ(t, EVENT_PLAYER_UNIT_SPELL_EFFECT)
    call TriggerAddCondition(t, Condition(function TrigConds))
    call TriggerAddAction(t, function Trig)

    set t = CreateTrigger()

    set CODES[1] = t
    call TriggerAddAction(t, function ActionsOf1)

    set t = CreateTrigger()

    set CODES[2] = t
    call TriggerAddAction(t, function ActionsOf2)

    set t = CreateTrigger()

    set CODES[3] = t
    call TriggerAddAction(t, function ActionsOf3)

    set t = null
endfunction

CODES
being a trigger array.
 
Top