# [Solved]Give item for every third level [Trigger Editor]

Status
Not open for further replies.

#### SnowYell

Level 8
Hi,
I would like to make a trigger for my RPG map.
Every third level my Hero gains, I wish him to gain a token of permanent bonus damage.

I have tried to make an integer that counts the amounts of levels gained.
Then I wished to divide them into 3, making it count how many tokens the Hero needs to achieve.
But the thing with integers is, if I have gained 5 levels from the same kill and I divide those into 3, I will give 1,66 = 2 integers. And by doing so, I might end up with more damage at max level, than supposed to.

Any suggestions on how to make a simple JASS trigger on how to give a Hero a permanent bonus damage token, for each third level?

It also has to be MUI. But each player has only 1 Hero, so it actually just has to be MPI tbh.

#### KILLCIDE

Level 37
I'm not sure what you mean with "I have gained 5 levels from the same kill and I divide those into 3, I will give 1,66 = 2 integers," but if you just need to do something every 3 levels (3, 6, 9, 12), you can use modulo.

JASS:
``````function CheckLevel takes nothing returns boolean
if (ModuloInteger(GetHeroLevel(GetTriggerUnit()), 3) == 0) then
// hero level is 3, 6, 9, 12...
// do stuff~
endif

return false
endfunction

//===========================================================================
function InitTrig_LevelUp takes nothing returns nothing
local trigger t = CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(t, EVENT_PLAYER_HERO_LEVEL)
endfunction``````

Making it MPI will be easy. Just make the variables array with the player number as the index.

#### SnowYell

Level 8
I'm not sure what you mean with "I have gained 5 levels from the same kill and I divide those into 3, I will give 1,66 = 2 integers," but if you just need to do something every 3 levels (3, 6, 9, 12), you can use modulo.

JASS:
``````function CheckLevel takes nothing returns boolean
if (ModuloInteger(GetHeroLevel(GetTriggerUnit()), 3) == 0) then
// hero level is 3, 6, 9, 12...
// do stuff~
endif

return false
endfunction

//===========================================================================
function InitTrig_LevelUp takes nothing returns nothing
local trigger t = CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(t, EVENT_PLAYER_HERO_LEVEL)
endfunction``````

Making it MPI will be easy. Just make the variables array with the player number as the index.

What I ment was if I have a Hero in level 3 and some how gains 5 levels from killing a high level creature. I didn't want any flaws caused by the integer that evens numbers out. Hard to explain.
Also, I think I misunderstood JASS. I thought it was the basics of editor. I can't script at it will take me forever to find the commands of everything I'm afraid.
Do you have a suggestion on how to use the basics of the trigger editor? (With normal actions etc.)

#### Tasyen

Level 36
If you map is one Hero per Player you can save the gained Powerups by Leveling in an Integer-Array. Then at rising a Level check for the difference and create the needed amount.

Here a possible solution:

• Hero LVL up
• Ereignisse
• Unit - Rise a Level
• Bedingungen
• Aktionen
• Set Int = ((Hero level of (Triggering unit)) / 3)
• Set Int = (Int - Hero_Gained_Powerups[(Player number of (Triggering player))])
• For each (Integer A) from 1 to Int, do (Actions)
• Schleifen - Aktionen
• Hero - Create Foliant of DMG and give it to (Triggering unit)
• Item - Remove (Last created item)
• Set Hero_Gained_Powerups[(Player number of (Triggering player))] = (Hero_Gained_Powerups[(Player number of (Triggering player))] + 1)
If you have more than one Hero per Player, than the easiest way is importing a unit indexer to get the correct amount of Powerups for each hero.

#### SnowYell

Level 8
If you map is one Hero per Player you can save the gained Powerups by Leveling in an Integer-Array. Then at rising a Level check for the difference and create the needed amount.

Here a possible solution:

• Hero LVL up
• Ereignisse
• Unit - Rise a Level
• Bedingungen
• Aktionen
• Set Int = ((Hero level of (Triggering unit)) / 3)
• Set Int = (Int - Hero_Gained_Powerups[(Player number of (Triggering player))])
• For each (Integer A) from 1 to Int, do (Actions)
• Schleifen - Aktionen
• Hero - Create Foliant of DMG and give it to (Triggering unit)
• Item - Remove (Last created item)
• Set Hero_Gained_Powerups[(Player number of (Triggering player))] = (Hero_Gained_Powerups[(Player number of (Triggering player))] + 1)
If you have more than one Hero per Player, than the easiest way is importing a unit indexer to get the correct amount of Powerups for each hero.

I followed your instructions with the trigger. I then put my Hero on the map with some tomes of experience. When I reached level 12, I had gotten 8 tomes of damage, where I should really have had 3.
Also, the first tome should be given at level 4, but is given past that.
I'm afraid it doesn't work. :/

#### Tasyen

Level 36
Oh, You wanted first power-up at LVL 4, a little difference (-1 to hero LVL before the /3, for calculation). Okay.
BTW Real -> Integer transformation is not rounded it is cuted (Removes any value behind the . 3.323 -> 3 ,, 3.8 -> 3)
Well the trigger i posted works for me.

I made a test map, Including an UI-Ability showing the current gained Tomes (upto 100).
hope it may help ya.

Hmm, for making this more Trigger-Crossfiring resistant increasing the gained power ups before the Tome gaining might be a good idea. Is include in the test map.

Your problem might be Trigger-Crossfiring, if you copied the trigger correct. (This can happen if we jump into another Trigger with an (for each Integer-A) loop, which i use for the powerup gain, This way the loop end-index can be bursted.
If thats the case just change the loop-Integer to something different like (for each Integer-B) or to any othervalue.

#### Attachments

• Power up.w3x
22.1 KB · Views: 39
Last edited:

#### SnowYell

Level 8
Oh, You wanted first power-up at LVL 4, a little difference (-1 to hero LVL before the /3, for calculation). Okay.
BTW Real -> Integer transformation is not rounded it is cuted (Removes any value behind the . 3.323 -> 3 ,, 3.8 -> 3)
Well the trigger i posted works for me.

I made a test map, Including an UI-Ability showing the current gained Tomes (upto 100).
hope it may help ya.

Hmm, for making this more Trigger-Crossfiring resistant increasing the gained power ups before the Tome gaining might be a good idea. Is include in the test map.

Your problem might be Trigger-Crossfiring, if you copied the trigger correct. (This can happen if we jump into another Trigger with an (for each Integer-A) loop, which i use for the powerup gain, This way the loop end-index can be bursted.
If thats the case just change the loop-Integer to something different like (for each Integer-B) or to any othervalue.

Oh ye, I saw an error I made in the calculation. It works.
Thanks for the nice help. +1

Status
Not open for further replies.

[Trigger] Team Level Trigger
Replies
9
Views
1K
Replies
1
Views
569
Replies
34
Views
2K
Replies
4
Views
394
Replies
5
Views
463