• 🏆 Texturing Contest #33 is OPEN! Contestants must re-texture a SD unit model found in-game (Warcraft 3 Classic), recreating the unit into a peaceful NPC version. 🔗Click here to enter!
  • 🏆 Hive's 6th HD Modeling Contest: Mechanical is now open! Design and model a mechanical creature, mechanized animal, a futuristic robotic being, or anything else your imagination can tinker with! 📅 Submissions close on June 30, 2024. Don't miss this opportunity to let your creativity shine! Enter now and show us your mechanical masterpiece! 🔗 Click here to enter!

[vJASS] minigame trigger optimization

Status
Not open for further replies.
Level 29
Joined
Oct 24, 2012
Messages
6,543
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:

Dr Super Good

Spell Reviewer
Level 64
Joined
Jan 18, 2005
Messages
27,204
set cross1_rx[(i*5)] = GetRandomReal(GetRectMinX(randomloc1), GetRectMaxX(randomloc1)) //used for gg_rct_Random_1a_for_cross_random
set cross1_ry[(i*5)] = GetRandomReal(GetRectMinY(randomloc2), GetRectMaxY(randomloc2)) //used for gg_rct_Random_1a_for_cross_random
The value (i*5) is used a lot without i changing. This makes it a good target for local caching to prevent excess computation. Same for (i*8).
 
Level 29
Joined
Oct 24, 2012
Messages
6,543
The value (i*5) is used a lot without i changing. This makes it a good target for local caching to prevent excess computation. Same for (i*8).

good point i didnt even think about tht ill change tht when i can thx anything else and here is the new code

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:
you dont need to name the trigger variable like that,just put private and name it as simple as it is :D,except if it will be used for another script
Also,i think you dont need two funcs for timer,just use an if statement
Also,those setunitx/y and issueorder should be inside a loop.
You can textmacro those lines that register the function one,two,three.

Btw,You have to change the way you name funcs,make it simple.
Longer names of functions has a slight slow speed when interpreted,just like that function with the name condition at the end.its like you are coding in jass :D.
Remember you are in the vjass world now
 
Level 29
Joined
Oct 24, 2012
Messages
6,543
its a minigame one tht is normally off i use another trigger to turn it on. id rather the 2 functions for the timers it makes it easier to see what is done in them. the setunitx/y and issue order for loop i didnt think it would really make a difference. umm i dont use textmacros. which functions r long ? the condition one was an old jass one tht i just copied. ive renamed tht one to conditions since i forgot to the first time. how many characters in the function name r considered long ? also updated some of the names for the variables.

edit: should i put the values for x and y in a rect array instead since it only gets called once when game starts and once when the minigame ends ? or should i leave it as x and y values ?
 
Last edited:
Level 11
Joined
Oct 13, 2005
Messages
233
Manually shortening function names is unnecessary and may even be harmful to the readability of your code. There are tools such as Vexorian's Map Optimizer which will automatically shorten all the function names in your map when you're ready to distribute your map.

You can read more about the optimizer here.
 
Status
Not open for further replies.
Top