Добавлен rsfghd,
опубликован
фигнёй страдал и снова какой-то кал высрал, доделывать возможно не буду
код
library SpellLib
globals
private constant timer TempTimer = CreateTimer( )
private constant real timerPeriodic = 0.01
private integer max = 0
private unit array dummy
private real array startx
private real array starty
private real array startz
private real array midx
private real array midy
private real array midz
private real array endx
private real array endy
private real array endz
private real array time
private real array maxTime
constant location LFZ = Location( 0.00, 0.00 )
endglobals
function GetLocZ takes real x, real y returns real
call MoveLocation( LFZ, x, y )
return GetLocationZ( LFZ )
endfunction
function move takes nothing returns nothing
local real x
local real y
local real z
local integer i
set i = 1
loop
set x = startx[i] + ( ( 2.00 * ( midx[i] - startx[i] ) ) + ( startx[i] - 2.00 * midx[i] + endx[i] ) * time[i] ) * time[i]
set y = starty[i] + ( ( 2.00 * ( midy[i] - starty[i] ) ) + ( starty[i] - 2.00 * midy[i] + endy[i] ) * time[i] ) * time[i]
set z = startz[i] + ( ( 2.00 * ( midz[i] - startz[i] ) ) + ( startz[i] - 2.00 * midz[i] + endz[i] ) * time[i] ) * time[i]
call SetUnitX( dummy[i], x )
call SetUnitY( dummy[i], y )
call SetUnitFlyHeight( dummy[i], z - GetLocZ( x, y ), 0.00 )
set time[i] = time[i] + timerPeriodic / maxTime[i]
if time[i] >= 1.00 then
call KillUnit( dummy[i] )
set dummy[i] = dummy[max]
set startx[i] = startx[max]
set starty[i] = starty[max]
set startz[i] = startz[max]
set endx[i] = endx[max]
set endy[i] = endy[max]
set endz[i] = endz[max]
set midx[i] = midx[max]
set midy[i] = midy[max]
set midz[i] = midz[max]
set time[i] = time[max]
set maxTime[i] = maxTime[max]
set i = i - 1
set max = max - 1
if max <= 0 then
call PauseTimer( TempTimer )
endif
endif
set i = i + 1
exitwhen i > max
endloop
endfunction
function Spell_Actions takes nothing returns nothing
local unit u = GetTriggerUnit( )
local real x = GetUnitX( u )
local real y = GetUnitY( u )
local real x1 = GetSpellTargetX( )
local real y1 = GetSpellTargetY( )
local real a = Atan2( y1 - y, x1 - x )
local real d = 150.00
local real angle
local real distance = 800.00
local integer i = 5
local integer i1 = 8
local boolean b = GetRandomInt( 0, 1 ) == 0
set bj_groupEnumOwningPlayer = GetOwningPlayer( u )
loop
set x1 = x + d * Cos( a )
set y1 = y + d * Sin( a )
set d = d + 150.00
set bj_lastCreatedUnit = CreateUnit( bj_groupEnumOwningPlayer, 'u000', x, y, GetRandomReal( 0.00, 360.00 ) )
call SetUnitPathing( bj_lastCreatedUnit, false )
call SetUnitX( bj_lastCreatedUnit, x1 )
call SetUnitY( bj_lastCreatedUnit, y1 )
call UnitApplyTimedLife( bj_lastCreatedUnit, 'BTLF', 3.00 )
if i == 1 then
call SetUnitScale( bj_lastCreatedUnit, 1.5, 1.5, 1.5 )
endif
if i == 5 then
loop
set max = max + 1
set startx[max] = x1
set starty[max] = y1
set startz[max] = GetLocZ( startx[max], starty[max] ) + 50.00
set dummy[max] = CreateUnit( bj_groupEnumOwningPlayer, 'u001', startx[max], starty[max], GetRandomReal( 0.00, 360.00 ) )
call UnitAddAbility( dummy[max], 'Arav' )
call SetUnitPathing( dummy[max], false )
call SetUnitX( dummy[max], startx[max] )
call SetUnitY( dummy[max], starty[max] )
call SetUnitFlyHeight( dummy[max], startz[max], 0.00 )
set endx[max] = x + 800.00 * Cos( a )
set endy[max] = y + 800.00 * Sin( a )
set endz[max] = GetLocZ( endx[max], endy[max] )
set angle = Atan2( endy[max] - starty[max], endx[max] - startx[max] )
if b then
set midx[max] = startx[max] + distance * Cos( angle - 90 * bj_DEGTORAD )
set midy[max] = starty[max] + distance * Sin( angle - 90 * bj_DEGTORAD )
set b = false
else
set midx[max] = startx[max] + distance * Cos( angle + 90 * bj_DEGTORAD )
set midy[max] = starty[max] + distance * Sin( angle + 90 * bj_DEGTORAD )
set b = true
endif
set midz[max] = GetLocZ( midx[max], midy[max] )
if startz[max] < endz[max] then
set midz[max] = midz[max] + endz[max]
else
set midz[max] = midz[max] + startz[max]
endif
set midz[max] = midz[max] + ( 800.00 - ( distance - 50 ) )
set time[max] = 0.00
set maxTime[max] = SquareRoot( ( endx[max] - startx[max] ) * ( endx[max] - startx[max] ) + ( endy[max] - starty[max] ) * ( endy[max] - starty[max] ) ) / 750
if maxTime[max] <= 0.00 then
set maxTime[max] = 0.01
endif
if max == 1 then
call TimerStart( TempTimer, timerPeriodic, true, function move )
endif
set i1 = i1 - 1
exitwhen i1 <= 0
set distance = distance - 75.00
endloop
endif
set i = i - 1
exitwhen i <= 0
call TriggerSleepAction( 0.10 )
endloop
endfunction
endlibrary
//===========================================================================
function InitTrig_Spell takes nothing returns nothing
//set gg_trg_Spell = CreateTrigger( )
endfunction
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
это не кал только для тех, кто в первые это увидел