D
Dino.pl
Guest
It invokes a blinding flash when a flashbang is "thrown".
Its power depends on unit's facing and distance from the exploding flashbang.
I'd be very happy if somebody tested it and said if it looks good and works as it's supposed to.
You need:
-a global array unit variable "unit" (array dimensions 0-11 -> player 1 - player 12)
-an ability with point target
-a unit assigned to the "unit" array (with the Flashbang ability of course)
Trigger Flashbang:
And function getAngle (in Custom Script Code):
I'm open on your suggestions!
Its power depends on unit's facing and distance from the exploding flashbang.
I'd be very happy if somebody tested it and said if it looks good and works as it's supposed to.
You need:
-a global array unit variable "unit" (array dimensions 0-11 -> player 1 - player 12)
-an ability with point target
-a unit assigned to the "unit" array (with the Flashbang ability of course)
Trigger Flashbang:
Code:
function Trig_Flashbang_Conditions takes nothing returns boolean
return GetSpellAbilityId() == 'A001'
endfunction
function Trig_Flashbang_Actions takes nothing returns nothing
local boolean my_boolean
local location my_locationTarget = GetSpellTargetLoc()
local location my_location
local real my_realAngle
local real my_realDist
local real my_real
local integer my_loopIndex = 0
if (bj_cineFadeContinueTimer != null) then
call DestroyTimer(bj_cineFadeContinueTimer)
endif
if (bj_cineFadeFinishTimer != null) then
call DestroyTimer(bj_cineFadeFinishTimer)
endif
loop
exitwhen my_loopIndex > 11
set my_boolean = true
set my_location = GetUnitLoc(udg_unit[my_loopIndex])
set my_realDist = DistanceBetweenPoints(my_location, my_locationTarget)
if (my_realDist == 0) then
set my_real = 1
else
set my_realAngle = getAngle(udg_unit[my_loopIndex], my_locationTarget)
set my_real = 384 / (my_realDist * (0.5 + my_realAngle / 360))
if (my_real < .2) then
set my_boolean = false
endif
if (my_real > 1) then
set my_real = 1
endif
endif
if (GetLocalPlayer() == Player(my_loopIndex)) then
call SetCineFilterTexture("ReplaceableTextures\\CameraMasks\\White_mask.blp")
call SetCineFilterBlendMode(BLEND_MODE_BLEND)
call SetCineFilterTexMapFlags(TEXMAP_FLAG_NONE)
call SetCineFilterStartUV(0, 0, 1, 1)
call SetCineFilterEndUV(0, 0, 1, 1)
call SetCineFilterStartColor(255, 255, 255, R2I(255 * my_real))
call SetCineFilterEndColor(255, 255, 255, 0)
call SetCineFilterDuration(4 * my_real)
call DisplayCineFilter(true)
endif
set my_loopIndex = my_loopIndex + 1
endloop
call RemoveLocation(my_location)
call RemoveLocation(my_locationTarget)
set my_location = null
set my_locationTarget = null
endfunction
function InitTrig_Flashbang takes nothing returns nothing
local integer index = 0
set gg_trg_Flashbang = CreateTrigger( )
loop
call TriggerRegisterPlayerUnitEvent(gg_trg_Flashbang, Player(index), EVENT_PLAYER_UNIT_SPELL_EFFECT, null)
set index = index + 1
exitwhen index == 11
endloop
call TriggerAddCondition( gg_trg_Flashbang, Condition( function Trig_Flashbang_Conditions ) )
call TriggerAddAction( gg_trg_Flashbang, function Trig_Flashbang_Actions )
endfunction
Code:
function getAngle takes unit get_unit, location get_location returns real
local real my_real = bj_RADTODEG * Atan2(GetLocationY(get_location) - GetUnitY(get_unit), GetLocationX(get_location) - GetUnitX(get_unit)) - GetUnitFacing(get_unit)
if (my_real < 0) then
set my_real = -my_real
endif
if (my_real > 180) then
return 360 - my_real
endif
return my_real
endfunction