- Joined
- Oct 24, 2012
- Messages
- 6,545
hello i have a minigame trigger i want to see if it could be optimized some more. basically it creates lightning at random points. it starts off creating 2 lightning bolts 1 vertical, 1 horizontal. it increases to 3 vertical and 3 horizontal. i believe it works fine ill have to test more after work. heres the code tho thx for anyone tht can help me improve it.
JASS:
scope PlusSignRandom initializer Plus_Sign_Random
globals
private integer counter = 0 // used in Plus Sign Random (1,2,3) Triggers
private boolean array LightningB
trigger array trg_Plus_Sign_Random
trigger trg_PSR_Killer
unit array LightningUnit // used to set units in array for Plus Sign Random
private real array LightningUnit_X
private real array LightningUnit_Y
private rect randomloc1
private rect randomloc2
private real array center_x
private real array center_y
private real array cross1_rx
private real array cross1_ry
private lightning array LightningEffect
private integer array handleID
endglobals
private function settingUnits takes nothing returns nothing
local integer Loop = 0
loop
exitwhen Loop > 23
call SetUnitX( LightningUnit[Loop], LightningUnit_X[Loop] )
call SetUnitY( LightningUnit[Loop], LightningUnit_Y[Loop] )
call ShowUnit( LightningUnit[Loop], false )
set Loop = Loop + 1
endloop
endfunction
private function whichTimer takes timer t returns integer
local integer i = 0
local integer h = GetHandleId( t)
set t = null
loop
exitwhen i > 3
if handleID[i] == h then
return i
endif
set i = i + 1
endloop
return 11
endfunction
private function secondTimer takes nothing returns nothing
local timer t = GetExpiredTimer()
local integer i = whichTimer( t)
set LightningB[i] = false
call DestroyLightning( LightningEffect[(i*2)])
call DestroyLightning( LightningEffect[((i*2)+1)])
set counter = counter + 1
if counter == 5 then
call EnableTrigger( trg_Plus_Sign_Random[2])
elseif counter == 10 then
call EnableTrigger( trg_Plus_Sign_Random[3])
endif
set LightningEffect[(i*2)] = null
set LightningEffect[((i*2)+1)] = null
call DestroyTimer( t)
set t = null
endfunction
private function firstTimer takes nothing returns nothing
local timer t = GetExpiredTimer()
local integer i = whichTimer( t)
local timer t2
set LightningB[i] = true
call DestroyLightning( LightningEffect[(i*2)])
call DestroyLightning( LightningEffect[((i*2)+1)])
set LightningEffect[(i*2)] = AddLightning("AFOD", true, cross1_rx[((i*5)+1)], center_y[i], cross1_rx[((i*5)+3)], center_y[i])
set LightningEffect[((i*2)+1)] = AddLightning("AFOD", true, center_x[i], cross1_ry[((i*5)+1)], center_x[i], cross1_ry[((i*5)+3)])
set t2 = CreateTimer()
call TimerStart( t2, (2.5-(i*.25)), false, function secondTimer)
set handleID[i] = GetHandleId( t2)
call DestroyTimer( t)
set t = null
set t2 = null
endfunction
private function Actions takes integer i returns nothing
local timer t
local integer i5 = i*5
local integer i8 = i*8
set center_x[i] = GetRandomReal(GetRectMinX(randomloc2), GetRectMaxX(randomloc2)) // use for center
set center_y[i] = GetRandomReal(GetRectMinY(randomloc1), GetRectMaxY(randomloc1)) // use for center
set cross1_rx[i5] = GetRandomReal(GetRectMinX(randomloc1), GetRectMaxX(randomloc1)) //used for gg_rct_Random_1a_for_cross_random
set cross1_ry[i5] = GetRandomReal(GetRectMinY(randomloc2), GetRectMaxY(randomloc2)) //used for gg_rct_Random_1a_for_cross_random
// offset units facing 0 degrees
set cross1_rx[(i5+1)] = cross1_rx[i5] + 987.50 // east x value
set cross1_rx[(i5+2)] = cross1_rx[i5] + 493.75 // east x value
// offset units facing 180 degrees
set cross1_rx[(i5+3)] = cross1_rx[i5] - 987.50 // west x value
set cross1_rx[(i5+4)] = cross1_rx[i5] - 493.75 // west x value
// offset units facing 90 degrees
set cross1_ry[(i5+1)] = cross1_ry[i5] + 987.50 // north y value
set cross1_ry[(i5+2)] = cross1_ry[i5] + 493.75 // north y value
// offset units facing 270 degrees
set cross1_ry[(i5+3)] = cross1_ry[i5] - 987.50 // south y value
set cross1_ry[(i5+4)] = cross1_ry[i5] - 493.75 // south y value
// units at center
// Making Units move to the random point selected w offseting specified above
// unit offset moving units = 180 degrees
call SetUnitX( LightningUnit[i8], cross1_rx[(i5+3)] )
call SetUnitY( LightningUnit[i8], center_y[i] )
call IssuePointOrder( LightningUnit[i8], "patrol", cross1_rx[(i5+4)], center_y[i] )
//
call SetUnitX( LightningUnit[(i8+1)], cross1_rx[(i5+4)] )
call SetUnitY( LightningUnit[(i8+1)], center_y[i] )
call IssuePointOrder( LightningUnit[(i8+1)], "patrol", cross1_rx[i5], center_y[i] )
// unit offset moving units = 0 degrees
call SetUnitX( LightningUnit[(i8+2)], cross1_rx[(i5+1)] )
call SetUnitY( LightningUnit[(i8+2)], center_y[i] )
call IssuePointOrder( LightningUnit[(i8+2)], "patrol", cross1_rx[(i5+2)], center_y[i] )
//
call SetUnitX( LightningUnit[(i8+3)], cross1_rx[(i5+2)] )
call SetUnitY( LightningUnit[(i8+3)], center_y[i] )
call IssuePointOrder( LightningUnit[(i8+3)], "patrol", cross1_rx[i5], center_y[i] )
// unit offset moving units = 270 degrees
call SetUnitX( LightningUnit[(i8+4)], center_x[i] )
call SetUnitY( LightningUnit[(i8+4)], cross1_ry[(i5+3)] )
call IssuePointOrder( LightningUnit[(i8+4)], "patrol", center_x[i], cross1_ry[(i5+4)] )
//
call SetUnitX( LightningUnit[(i8+5)], center_x[i] )
call SetUnitY( LightningUnit[(i8+5)], cross1_ry[(i5+4)] )
call IssuePointOrder( LightningUnit[(i8+5)], "patrol", center_x[i], cross1_ry[i5] )
// unit offset moving units = 90 degrees
call SetUnitX( LightningUnit[(i8+6)], center_x[i] )
call SetUnitY( LightningUnit[(i8+6)], cross1_ry[(i5+1)] )
call IssuePointOrder( LightningUnit[(i8+6)], "patrol", center_x[i], cross1_ry[(i5+2)] )
//
call SetUnitX( LightningUnit[(i8+7)], center_x[i] )
call SetUnitY( LightningUnit[(i8+7)], cross1_ry[(i5+2)] )
call IssuePointOrder( LightningUnit[(i8+7)], "patrol", center_x[i], cross1_ry[i5] )
// starting lightning effects
set LightningEffect[(i*2)] = AddLightning( "CLPB", true, cross1_rx[(i5+1)], center_y[i], cross1_rx[(i5+3)], center_y[i] )
set LightningEffect[((i*2)+1)] = AddLightning( "CLPB", true, center_x[i], cross1_ry[(i5+1)], center_x[i], cross1_ry[(i5+3)] )
set t = CreateTimer()
call TimerStart( t, (3.00-(i*.25)), false, function firstTimer)
set handleID[i] = GetHandleId( t)
set t = null
endfunction
private function one takes nothing returns nothing
call Actions( 0)
endfunction
private function two takes nothing returns nothing
call Actions( 1)
endfunction
private function three takes nothing returns nothing
call Actions( 2)
endfunction
private function KillingFunction takes unit u returns nothing
local integer p = GetPlayerId( GetTriggerPlayer())
call KillUnit( u)
if p == 0 then
call textall( "Player 2 Has Won The Minigame", p)
elseif p == 1 then
call textall( "Player 1 Has Won The Minigame", p)
endif
call DisableTrigger( trg_PSR_Killer )
call DisableTrigger( trg_Plus_Sign_Random[1] )
call DisableTrigger( trg_Plus_Sign_Random[2] )
call DisableTrigger( trg_Plus_Sign_Random[3] )
call pauseall( false)
call PolledWait( 7.00 )
call settingUnits()
set LightningB[0] = false
set LightningB[1] = false
set LightningB[2] = false
endfunction
private function Kill_Actions takes nothing returns nothing
local integer i1 = 0
local integer i2 = 8
local integer i3 = 16
local unit u = GetTriggerUnit()
loop
exitwhen i1 > 8
if LightningB[0] == true and IsUnitInRange( u, LightningUnit[i1], 125 ) then
call KillingFunction( u)
elseif LightningB[1] == true and IsUnitInRange( u, LightningUnit[i2], 125 ) then
call KillingFunction( u)
elseif LightningB[2] == true and IsUnitInRange( u, LightningUnit[i3], 125 ) then
call KillingFunction( u)
endif
set i1 = i1 + 1
set i2 = i2 + 1
set i3 = i3 + 1
endloop
set u = null
endfunction
private function conditions takes nothing returns boolean
return GetTriggerUnit() == Selected_Hero_Player[0] or GetTriggerUnit() == Selected_Hero_Player[1]
endfunction
private function setup takes nothing returns nothing
local real array x
local real array y
local lightning array LightningEffect
local integer Loop = 0
set randomloc1 = (gg_rct_Random_1_for_cross_random)
set randomloc2 = (gg_rct_Random_2_for_cross_random)
// set the units for plus sign random unit array
set LightningUnit[0] = gg_unit_h05F_0036
set LightningUnit[1] = gg_unit_h05F_0037
set LightningUnit[2] = gg_unit_h05F_0038
set LightningUnit[3] = gg_unit_h05F_0039
set LightningUnit[4] = gg_unit_h05F_0040
set LightningUnit[5] = gg_unit_h05F_0041
set LightningUnit[6] = gg_unit_h05F_0043
set LightningUnit[7] = gg_unit_h05F_0044
set LightningUnit[8] = gg_unit_h05F_0045
set LightningUnit[9] = gg_unit_h05F_0046
set LightningUnit[10] = gg_unit_h05F_0047
set LightningUnit[11] = gg_unit_h05F_0048
set LightningUnit[12] = gg_unit_h05F_0049
set LightningUnit[13] = gg_unit_h05F_0050
set LightningUnit[14] = gg_unit_h05F_0051
set LightningUnit[15] = gg_unit_h05F_0052
set LightningUnit[16] = gg_unit_h05F_0053
set LightningUnit[17] = gg_unit_h05F_0054
set LightningUnit[18] = gg_unit_h05F_0055
set LightningUnit[19] = gg_unit_h05F_0056
set LightningUnit[20] = gg_unit_h05F_0058
set LightningUnit[21] = gg_unit_h05F_0059
set LightningUnit[22] = gg_unit_h05F_0060
set LightningUnit[23] = gg_unit_h05F_0061
// set the x value for plus sign random unit regions
set LightningUnit_X[0] = GetRectCenterX(gg_rct_Lightning_Unit_1)
set LightningUnit_X[1] = GetRectCenterX(gg_rct_Lightning_Unit_2)
set LightningUnit_X[2] = GetRectCenterX(gg_rct_Lightning_Unit_3)
set LightningUnit_X[3] = GetRectCenterX(gg_rct_Lightning_Unit_4)
set LightningUnit_X[4] = GetRectCenterX(gg_rct_Lightning_Unit_5)
set LightningUnit_X[5] = GetRectCenterX(gg_rct_Lightning_Unit_6)
set LightningUnit_X[6] = GetRectCenterX(gg_rct_Lightning_Unit_7)
set LightningUnit_X[7] = GetRectCenterX(gg_rct_Lightning_Unit_8)
set LightningUnit_X[8] = GetRectCenterX(gg_rct_Lightning_Unit_9)
set LightningUnit_X[9] = GetRectCenterX(gg_rct_Lightning_Unit_10)
set LightningUnit_X[10] = GetRectCenterX(gg_rct_Lightning_Unit_11)
set LightningUnit_X[11] = GetRectCenterX(gg_rct_Lightning_Unit_12)
set LightningUnit_X[12] = GetRectCenterX(gg_rct_Lightning_Unit_13)
set LightningUnit_X[13] = GetRectCenterX(gg_rct_Lightning_Unit_14)
set LightningUnit_X[14] = GetRectCenterX(gg_rct_Lightning_Unit_15)
set LightningUnit_X[15] = GetRectCenterX(gg_rct_Lightning_Unit_16)
set LightningUnit_X[16] = GetRectCenterX(gg_rct_Lightning_Unit_17)
set LightningUnit_X[17] = GetRectCenterX(gg_rct_Lightning_Unit_18)
set LightningUnit_X[18] = GetRectCenterX(gg_rct_Lightning_Unit_19)
set LightningUnit_X[19] = GetRectCenterX(gg_rct_Lightning_Unit_20)
set LightningUnit_X[20] = GetRectCenterX(gg_rct_Lightning_Unit_21)
set LightningUnit_X[21] = GetRectCenterX(gg_rct_Lightning_Unit_22)
set LightningUnit_X[22] = GetRectCenterX(gg_rct_Lightning_Unit_23)
set LightningUnit_X[23] = GetRectCenterX(gg_rct_Lightning_Unit_24)
// set the y value for plus sign random unit regions
set LightningUnit_Y[0] = GetRectCenterY(gg_rct_Lightning_Unit_1)
set LightningUnit_Y[1] = GetRectCenterY(gg_rct_Lightning_Unit_2)
set LightningUnit_Y[2] = GetRectCenterY(gg_rct_Lightning_Unit_3)
set LightningUnit_Y[3] = GetRectCenterY(gg_rct_Lightning_Unit_4)
set LightningUnit_Y[4] = GetRectCenterY(gg_rct_Lightning_Unit_5)
set LightningUnit_Y[5] = GetRectCenterY(gg_rct_Lightning_Unit_6)
set LightningUnit_Y[6] = GetRectCenterY(gg_rct_Lightning_Unit_7)
set LightningUnit_Y[7] = GetRectCenterY(gg_rct_Lightning_Unit_8)
set LightningUnit_Y[8] = GetRectCenterY(gg_rct_Lightning_Unit_9)
set LightningUnit_Y[9] = GetRectCenterY(gg_rct_Lightning_Unit_10)
set LightningUnit_Y[10] = GetRectCenterY(gg_rct_Lightning_Unit_11)
set LightningUnit_Y[11] = GetRectCenterY(gg_rct_Lightning_Unit_12)
set LightningUnit_Y[12] = GetRectCenterY(gg_rct_Lightning_Unit_13)
set LightningUnit_Y[13] = GetRectCenterY(gg_rct_Lightning_Unit_14)
set LightningUnit_Y[14] = GetRectCenterY(gg_rct_Lightning_Unit_15)
set LightningUnit_Y[15] = GetRectCenterY(gg_rct_Lightning_Unit_16)
set LightningUnit_Y[16] = GetRectCenterY(gg_rct_Lightning_Unit_17)
set LightningUnit_Y[17] = GetRectCenterY(gg_rct_Lightning_Unit_18)
set LightningUnit_Y[18] = GetRectCenterY(gg_rct_Lightning_Unit_19)
set LightningUnit_Y[19] = GetRectCenterY(gg_rct_Lightning_Unit_20)
set LightningUnit_Y[20] = GetRectCenterY(gg_rct_Lightning_Unit_21)
set LightningUnit_Y[21] = GetRectCenterY(gg_rct_Lightning_Unit_22)
set LightningUnit_Y[22] = GetRectCenterY(gg_rct_Lightning_Unit_23)
set LightningUnit_Y[23] = GetRectCenterY(gg_rct_Lightning_Unit_24)
call settingUnits()
//set the corners for the points of the lightning effects
set x[0] = GetRectCenterX(gg_rct_PlusSign_NW)
set y[0] = GetRectCenterY(gg_rct_PlusSign_NW)
set x[1] = GetRectCenterX(gg_rct_PlusSign_NE)
set y[1] = GetRectCenterY(gg_rct_PlusSign_NE)
set x[2] = GetRectCenterX(gg_rct_PlusSign_SE)
set y[2] = GetRectCenterY(gg_rct_PlusSign_SE)
set x[3] = GetRectCenterX(gg_rct_PlusSign_SW)
set y[3] = GetRectCenterY(gg_rct_PlusSign_SW)
// set the lightning effects for the edge of the map
set LightningEffect[0] = AddLightning( "CLPB", true, x[0], y[0], x[1], y[1])
set LightningEffect[1] = AddLightning( "CLPB", true, x[1], y[1], x[2], y[2])
set LightningEffect[2] = AddLightning( "CLPB", true, x[2], y[2], x[3], y[3])
set LightningEffect[3] = AddLightning( "CLPB", true, x[3], y[3], x[0], y[0])
set LightningEffect[4] = AddLightning( "AFOD", true, x[0], y[0], x[1], y[1])
set LightningEffect[5] = AddLightning( "AFOD", true, x[1], y[1], x[2], y[2])
set LightningEffect[6] = AddLightning( "AFOD", true, x[2], y[2], x[3], y[3])
set LightningEffect[7] = AddLightning( "AFOD", true, x[3], y[3], x[0], y[0])
loop
exitwhen Loop > 7
set LightningEffect[Loop] = null
set Loop = Loop + 1
endloop
set Loop = 0
loop
exitwhen Loop > 23
call TriggerRegisterUnitInRange( trg_PSR_Killer, LightningUnit[Loop], 125, Condition( function conditions))
set Loop = Loop + 1
endloop
set counter = 0
endfunction
//===========================================================================
function Plus_Sign_Random takes nothing returns nothing
set trg_Plus_Sign_Random[1] = CreateTrigger()
call DisableTrigger( trg_Plus_Sign_Random[1])
call TriggerRegisterTimerEvent( trg_Plus_Sign_Random[1], 6.00, true)
call TriggerAddAction( trg_Plus_Sign_Random[1], function one)
set trg_Plus_Sign_Random[2] = CreateTrigger()
call DisableTrigger( trg_Plus_Sign_Random[2])
call TriggerRegisterTimerEvent( trg_Plus_Sign_Random[2], 5.50, true)
call TriggerAddAction( trg_Plus_Sign_Random[2], function two)
set trg_Plus_Sign_Random[3] = CreateTrigger()
call DisableTrigger( trg_Plus_Sign_Random[3])
call TriggerRegisterTimerEvent( trg_Plus_Sign_Random[3], 5.00, true)
call TriggerAddAction( trg_Plus_Sign_Random[3], function three)
set trg_PSR_Killer = CreateTrigger()
call setup()
call TriggerAddAction( trg_PSR_Killer, function Kill_Actions )
endfunction
endscope
Last edited: