PrisonLove
Hard Realist
- Reaction score
- 78
I'm using the vanilla editor (running on a mac) and I have a trigger that fires when a unit picks up a red mushroom (it's a mario map). As you know, when you get a red mushroom in mario your character grows, gets more health/damage/other stuff. That's what's happening here. Everything about this trigger works, except for the shrinking portion. The character grows, gets damage, range, etc, the range and damage go back to normal, but the character never gets smaller and I don't know why.
Here is the code:
Here is the code:
JASS:
function RedMushroomConditions takes nothing returns boolean
return GetItemTypeId(GetManipulatedItem()) == 039;I003039;
endfunction
function RedMushroomShrink takes nothing returns nothing
local timer t = GetExpiredTimer()
local integer id = GetHandleId(t)
local unit caster = LoadUnitHandle(udg_hash, id, 0)
local real scaleAmnt = LoadReal(udg_hash, id, 1)
local real scaleFactor = scaleAmnt - 5
local real scale = 200 - scaleFactor
local real scaleCap = 100.00
if (scale > scaleCap) then
call SetUnitScalePercent(caster, scale, scale, scale)
set scaleAmnt = scaleFactor
call SaveReal(udg_hash, id, 1, scaleAmnt)
else
call PauseTimer(t)
call DestroyTimer(t)
call FlushChildHashtable(udg_hash, id)
endif
set t = null
set caster = null
endfunction
function RedMushroomGrow takes nothing returns nothing
local timer t = GetExpiredTimer()
local integer id = GetHandleId(t)
local unit caster = LoadUnitHandle(udg_hash, id, 0)
local real scaleAmnt = LoadReal(udg_hash, id, 1)
local real scaleFactor = scaleAmnt + 5
local real scale = 100.00 + scaleFactor
local real scaleCap = 215.00
if (scale < scaleCap) then
call SetUnitScalePercent(caster, scale, scale, scale)
set scaleAmnt = scaleFactor
call SaveReal(udg_hash, id, 1, scaleAmnt)
else
call PauseTimer(t)
call DestroyTimer(t)
endif
set t = null
set caster = null
endfunction
function RedMushroomActions takes nothing returns nothing
local unit caster = GetTriggerUnit()
local player p = GetOwningPlayer(caster)
local integer i = GetPlayerId(p) + 1
local timer t = CreateTimer()
local timer t2 = CreateTimer()
local integer id = GetHandleId(t)
local real duration = 10
local real scaleAmnt = 0
set udg_damageAmount<i> = udg_damageAmount<i> + 40
set udg_offsetRange<i> = udg_offsetRange<i> + 50
set udg_attackRange<i> = udg_attackRange<i> + 50
call UnitAddAbility(caster, 039;A00B039;)
call SaveUnitHandle(udg_hash, id, 0, caster)
call SaveReal(udg_hash, id, 1, scaleAmnt)
call TimerStart(t, .03, true, function RedMushroomGrow)
call TriggerSleepAction(duration)
set scaleAmnt = LoadReal(udg_hash, id, 1)
set id = GetHandleId(t2)
call SaveUnitHandle(udg_hash, id, 0, caster)
call SaveReal(udg_hash, id, 1, scaleAmnt)
call TimerStart(t2, .03, true, function RedMushroomShrink)
call UnitRemoveAbility(caster, 039;A00B039;)
set udg_damageAmount<i> = udg_damageAmount<i> - 40
set udg_offsetRange<i> = udg_offsetRange<i> - 50
set udg_attackRange<i> = udg_attackRange<i> - 50
set caster = null
set p = null
set t = null
set t2 = null
endfunction
//===========================================================================
function InitTrig_RedMushroom takes nothing returns nothing
local trigger t = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( t, EVENT_PLAYER_UNIT_PICKUP_ITEM )
call TriggerAddCondition( t, Condition( function RedMushroomConditions ) )
call TriggerAddAction( t, function RedMushroomActions )
set t = null
endfunction</i></i></i></i></i></i></i></i></i></i></i></i>