cr4xzZz
Also known as azwraith_ftL.
- Reaction score
- 51
Somebody requested a JASS version of my GUI Time Lapse, so I decided to make it. I just want to ask when (if) this gets approved, can I move it to the other Time Lapse thread and attach it there so there won't be two different threads?
gui/jass/vjass? vjass
mui? yes
leakless? yes
lagless? yes
requires? JASS NewGen v1.5a, PUI v4.2 and ABCT v2.0
Screenshot not included because the spell is instant and you will only see a special effect. The screenshot cannot show the full effect of the spell so don't bother asking for one. Just dl and test it
Description:
Warps time on himself, transporting the Weaver 5 seconds back into the past. Does not affect cooldowns, gold or XP (nor items).
Code:
Sorry for the crappy test map... ^^
gui/jass/vjass? vjass
mui? yes
leakless? yes
lagless? yes
requires? JASS NewGen v1.5a, PUI v4.2 and ABCT v2.0
Screenshot not included because the spell is instant and you will only see a special effect. The screenshot cannot show the full effect of the spell so don't bother asking for one. Just dl and test it
Description:
Warps time on himself, transporting the Weaver 5 seconds back into the past. Does not affect cooldowns, gold or XP (nor items).
Code:
JASS:
scope TimeLapse
//###########################################################
// C O N F I G U R A T I O N M E N U
//###########################################################
globals
// Raw code of the Time Lapse spell
private constant integer AID_TIMELAPSE_RAW = 039;A000039;
// Special effect created on cast
private constant string SFX_EFFECT = "Abilities\\Spells\\NightElf\\Blink\\BlinkTarget.mdl"
// How many seconds to return back in time
private constant integer TIME_BACK = 5
endglobals
//###########################################################
// E N D O F C O N F I G U R A T I O N M E N U
//###########################################################
globals
private group GROUP = CreateGroup()
private real array HP
private real array MP
private real array XX
private real array YY
private integer array COUNTER
endglobals
private struct Data
unit weaver
endstruct
private function ConditionsCast takes nothing returns boolean
return GetSpellAbilityId() == AID_TIMELAPSE_RAW
endfunction
private function ConditionsPeriodic takes nothing returns boolean
return GetUnitAbilityLevel(GetTriggerUnit(), AID_TIMELAPSE_RAW) == 1 and IsUnitInGroup(GetTriggerUnit(), GROUP) == false
endfunction
private function Callback takes nothing returns boolean
local Data d = ABCT_GetData()
local integer pui = GetUnitIndex(d.weaver)
local integer iii = 0
set COUNTER[pui] = COUNTER[pui] + 1
set HP[COUNTER[pui]] = GetWidgetLife(d.weaver)
set MP[COUNTER[pui]] = GetUnitState(d.weaver, UNIT_STATE_MANA)
set XX[COUNTER[pui]] = GetUnitX(d.weaver)
set YY[COUNTER[pui]] = GetUnitY(d.weaver)
if COUNTER[pui] > 8190 then
set COUNTER[pui] = 0
loop
exitwhen iii > TIME_BACK + 1
set HP[COUNTER[pui]] = GetWidgetLife(d.weaver)
set MP[COUNTER[pui]] = GetUnitState(d.weaver, UNIT_STATE_MANA)
set XX[COUNTER[pui]] = GetUnitX(d.weaver)
set YY[COUNTER[pui]] = GetUnitY(d.weaver)
set COUNTER[pui] = iii
set iii = iii + 1
endloop
endif
return false
endfunction
private function ActionsCast takes nothing returns nothing
local unit cast = GetTriggerUnit()
local integer pui = GetUnitIndex(cast)
call SetWidgetLife(cast, HP[COUNTER[pui] - TIME_BACK])
call SetUnitState(cast, UNIT_STATE_MANA, MP[COUNTER[pui] - TIME_BACK])
call DestroyEffect(AddSpecialEffect(SFX_EFFECT, GetUnitX(cast), GetUnitY(cast)))
call SetUnitPosition(cast, XX[COUNTER[pui] - TIME_BACK], YY[COUNTER[pui] - TIME_BACK])
call DestroyEffect(AddSpecialEffect(SFX_EFFECT, GetUnitX(cast), GetUnitY(cast)))
set cast = null
endfunction
private function ActionsPeriodic takes nothing returns nothing
local Data d = Data.create()
local integer pui
local integer iii = 0
set d.weaver = GetTriggerUnit()
call GroupAddUnit(GROUP, d.weaver)
set pui = GetUnitIndex(d.weaver)
loop
exitwhen iii > TIME_BACK + 1
set HP[COUNTER[pui]] = GetWidgetLife(d.weaver)
set MP[COUNTER[pui]] = GetUnitState(d.weaver, UNIT_STATE_MANA)
set XX[COUNTER[pui]] = GetUnitX(d.weaver)
set YY[COUNTER[pui]] = GetUnitY(d.weaver)
set iii = iii + 1
set COUNTER[pui] = iii
endloop
call ABCT_Start(function Callback, d, 1.)
endfunction
function InitTrig_TimeLapse takes nothing returns nothing
local trigger cast = CreateTrigger()
local trigger periodic = CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(cast, EVENT_PLAYER_UNIT_SPELL_EFFECT)
call TriggerRegisterAnyUnitEventBJ(periodic, EVENT_PLAYER_HERO_SKILL)
call TriggerAddCondition(cast, Condition(function ConditionsCast))
call TriggerAddCondition(periodic, Condition(function ConditionsPeriodic))
call TriggerAddAction(cast, function ActionsCast)
call TriggerAddAction(periodic, function ActionsPeriodic)
endfunction
endscope
Sorry for the crappy test map... ^^